PHP 使用 LEFT JOIN 时如何按结果数组进行分组

标签 php mysql group-by

请简化对我的问题的解释,假设我已经完成了一个小型 SQL 查询来从三个表中选择数据:

SELECT  blockTitre, ChampsType, ChampsNom
FROM form_builder
    LEFT JOIN block_champs
        ON formBuilderBId = blockId
    RIGHT JOIN ajout_champs
        ON ChampsId = formBuilderChId

当我 var_dump 结果时,我得到以下结果:

array (size=6)
  0 => 
    object(stdClass)[8]
      public 'blockTitre' => string 'Misc' (length=4)
      public 'ChampsType' => string 'submit' (length=6)
      public 'ChampsNom' => string 'submit' (length=6)
  1 => 
    object(stdClass)[9]
      public 'blockTitre' => string 'Misc' (length=4)
      public 'ChampsType' => string 'hidden' (length=6)
      public 'ChampsNom' => string 'page' (length=4)
  2 => 
    object(stdClass)[10]
      public 'blockTitre' => string 'Information général' (length=21)
      public 'ChampsType' => string 'text' (length=4)
      public 'ChampsNom' => string 'email' (length=5)
  3 => 
    object(stdClass)[11]
      public 'blockTitre' => string 'Information général' (length=21)
      public 'ChampsType' => string 'text' (length=4)
      public 'ChampsNom' => string 'prenom' (length=6)
  4 => 
    object(stdClass)[12]
      public 'blockTitre' => string 'Information général' (length=21)
      public 'ChampsType' => string 'text' (length=4)
      public 'ChampsNom' => string 'age' (length=3)
  5 => 
    object(stdClass)[13]
      public 'blockTitre' => string 'Misc' (length=4)
      public 'ChampsType' => string 'text' (length=4)
      public 'ChampsNom' => string 'nommm' (length=5)

我想要的是通过blockTitre重新组合结果。

我尝试了 SQL 语句 GROUP BY 但它只返回两行(我认为这是逻辑)!

请高手如何让所有行按blockTitre分组?

提前谢谢您。

编辑:

拜托,我需要得到类似的东西:

 0 =>
       'blockTitre' => string 'Misc' 
            'ChampsType' => string 'submit' 
            'ChampsNom' => string 'submit'
            'ChampsType' => string 'text' 
            'ChampsNom' => string 'nommm' 
            'ChampsType' => string 'hidden' 
            'ChampsNom' => string 'page' 
  1 =>     
       'blockTitre' => string 'Information général' 
            'ChampsType' => string 'text' 
            'ChampsNom' => string 'email' 
            'ChampsType' => string 'text' 
            'ChampsNom' => string 'prenom' 
            'ChampsType' => string 'text' 
            'ChampsNom' => string 'age'

最佳答案

GROUP BY 按照您描述的情况工作。它将仅保留唯一值:MiscInformation général。它将使用它看到的第一行来获取其他列的值。所以实际上,您只会得到 2 行。

您正在寻找的输出是什么?通常,您使用GROUP BY来仅获取唯一值,或者进行某种COUNTing。

请记住,SQL 只能提供“平面”数据,即如下结构:

data = {
    "misc": [{
        "row1",
        "row2"
    }],
    "info": [{
        "row1",
        "row2"
    }]
 }

这是必须通过逐行读取结果集来完成的事情。

关于PHP 使用 LEFT JOIN 时如何按结果数组进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14198357/

相关文章:

Java 8 分组并附加到集合

php - CakePHP 查找最近的日期

php - 按照其他数组定义的顺序对数组进行排序

php - 协同工作的 MySQL 表

mysql - SQL 选择组的第 n 个成员

python - 系列的 Groupby 和 max

php - 如何将保存的 localStorage 网络数据传递给 php 脚本?

php - ORDER BY 在 php 的连接中无法正常工作

mysql - 通过 EJB 丢失从 DAO 到 Business 的列表中存储的 id(主键)值

php - 更新查询几乎有 10 次失败