![](/img/trans.png)
[英]Can I use a single MySQL query to select distinct rows and then non-distinct rows if a limit hasn't been reached?
[英]SELECT Query grouping/merging for non-DISTINCT result set
---------- ---------- ---------- ----------
| t1 | | t2 | | t3 | | t4 |
---------- ---------- ---------- ----------
| id | | id | | id | | t1_id |
| foo | | bar | | foobar | | t2_id |
---------- ---------- ---------- | t3_id |
----------
我有这组表,并带有以下特定查询:
从t4选择foo,bar,foobar
左联接t1 ON t1.id = t4.t1_id
左联接t2 ON t2.id = t4.t2_id
左联接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
处理同样的问题 。
您应该让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是更好的地方做了格式化。
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.