请简化我的问题的解释,假设我已经做了一个小的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'
答案 0 :(得分:1)
GROUP BY
用于描述您的情况。它只会留下唯一的值:Misc
和Information 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
在您的查询中。