GROUP_CONCAT()
通常按逻辑调用group并创建临时表,这通常对性能有很大的负面影响。有时您可以添加正确的索引,以避免查询分组中的临时表,但并非所有情况下都如此。
https://stackoverflow.com/a/26225148/9685125
看完这篇文章后,我意识到我做错了,因为很多时候我用巨大的
组\u CONCAT()
. 例如
GROUP_CONCAT(DISTINCT exam.title) AS exam,
GROUP_CONCAT(subject.title, '<br/> Th - ', mark.th, ' | PR - ', mark.pr SEPARATOR ',') AS mark
GROUP_CONCAT
在下列情况下不使用
subquery
. 我是说只用
Mysql join
,
学生
id | Rid | name
========================
1 | 1 | john
标志
id | std_id | th
======================
1 | 1 | 60
2 | 1 | 70
3 | 1 | 80
4 | 1 | 90
"SELECT
student.en_name, mark.th
FROM student
JOIN mark ON student.id = mark.std_id
WHERE student.id=:id;"
如果只使用
JOIN
John: 60, John: 70, John: 80, John: 90
GROUP BY
分组依据
至学生id,仅获取第一行
"SELECT
student.en_name, mark.th
FROM student
JOIN mark ON student.id = mark.std_id
WHERE student.id=:id
GROUP BY student.id;"
Result is
John: 60
所以为了得到结果,我们必须分配它
group.concat
"SELECT
student.en_name,
GROUP_CONCAT(mark.th) as mark
FROM student
JOIN mark ON student.id = mark.std_id
WHERE student.id=:id
GROUP BY student.id;"
最后给出了爆炸阵列的预期结果
$name=$row['en_name'];
echo "$name: <br/>";
$mrk_array = explode(',',$row['mark']);
foreach($mrk_array as $mark){
echo $mark.", ";
}
John:
60, 70, 80, 90,
在这里,我看不到任何其他的选择
获取每个
Id
组\u CONCAT
还有一个朋友告诉我
组\u CONCAT
如果你要“爆炸”它。您不妨返回一个漂亮的关联数组,然后在那里显示它。
但我不明白,他是什么意思?