---------- ---------- ---------- ----------
| t1 | | t2 | | t3 | | t4 |
---------- ---------- ---------- ----------
| id | | id | | id | | t1_id |
| foo | | bar | | foobar | | t2_id |
---------- ---------- ---------- | t3_id |
----------
我有这组表,并且有这个特定的查询:
SELECT foo,bar,foobar FROM t4
LEFT JOIN t1 ON t1.id = t4.t1_id
LEFT JOIN t2 ON t2.id = t4.t2_id
LEFT JOIN t3 ON t3.id = t4.t3_id;
然后我可以想出这个特定的结果集:
------------------------------ -------------------------------
| foo | bar | foobar | => | foo | bar | foobar |
------------------------------ -------------------------------
| x | y | a | | x | y | a |
| x | y | b | | | | b |
| x | y | c | | | | c |
------------------------------ -------------------------------
问题是:如何将查询格式化为以某种方式将具有相似条目的列分组,而不是那些不具有相似条目的列?这在MySQL
中是否可行?我是通过PHP
输出的,所以我应该让PHP
处理它的格式吗?
同样的问题是否应由 PHP
处理。
答案 0 :(得分:1)
你应该让PHP处理格式化。通常,SQL结果集(和表)表示无序集。您的格式有一个特定的顺序。
将值放在一行可能会有所帮助,第三列作为“列表”:
SELECT foo, bar, GROUP_CONCAT(foobar) as foobars
FROM t4 LEFT JOIN
t1
ON t1.id = t4.t1_id LEFT JOIN
t2
ON t2.id = t4.t2_id LEFT JOIN
t3
ON t3.id = t4.t3_id
GROUP BY foo, bar;
也就是说, 可以在MySQL中做你想做的事情(例如使用变量),但PHP是更好的格式化地方。
答案 1 :(得分:0)
SELECT distinct foo, bar, foobar FROM t4
LEFT JOIN t1 ON t1.id = t4.t1_id
LEFT JOIN t2 ON t2.id = t4.t2_id
LEFT JOIN t3 ON t3.id = t4.t3_id;