繁体   English   中英

SELECT查询分组/合并非DISTINCT结果集

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM