PHP如何在使用LEFT JOIN时GROUP BY结果数组

时间:2013-01-07 14:55:13

标签: 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'

2 个答案:

答案 0 :(得分:1)

GROUP BY用于描述您的情况。它只会留下唯一的值:MiscInformation général。它会看到它看到的第一行的其他列的值。事实上,你只会得到2行。

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

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

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

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

答案 1 :(得分:0)

如果您正在使用PDO,请查看PDO::FETCH_GROUP

要获取按blockTitre分组的结果,请尝试此操作(假设您已使用PDO执行了查询):

$rows = $result->fetchAll(PDO::FETCH_OBJ | PDO::FETCH_GROUP);

可以找到更多信息in the PHP docs

现在,您可以随心所欲地遍历群组。只需确保

GROUP BY blockTitre
在您的查询中