多表查询ORDER BY然后GROUP BY

时间:2013-09-16 17:35:36

标签: mysql sql mysqli

目标:加入两个表,按一列(ui.UNO)和GROUP BY(images.INO)排序。

问题:ORDER BY会像您期望的那样返回重复的结果,但是当我尝试ORDER BY将当前用户的图像带到顶部时,如果我GROUP GROUP只显示第一个结果,无论它是否链接到另一个用户。

例如:在下表中,我正在寻找第二个结果,但如果我只使用GROUP BY,则会显示第一个结果,并且任何链接数据(ui.IUTally)都将出错。 感谢您的帮助。

Images                          
   INO    |    IName    |    IDescription
   3      |    Sports   |    "......"      
   3      |    Sports   |    "......"

UI
   UNO    |    INO     |    IUTally  
   4      |    3       |    12
   7      |    3       |    6

$query="
SELECT images.INO, images. IName, ui. UNO, ui. IUTally
FROM images 
LEFT JOIN ui ON images. INO = ui. INO
GROUP BY images. INO
ORDER BY ui. UNO = $uno DESC";

Images / UI                           
   INO    |    IName    |    UNO    |    INO     |    IUTally  
   3      |    Sports   |    4      |    3       |    12
   3      |    Sports   |    7      |    3       |    6

2 个答案:

答案 0 :(得分:0)

为了查看与其他用户链接的数据,您可能需要在SELECT子句中使用GROUP_CONCAT函数,如下所示。

SELECT images.INO, GROUP_CONCAT(images.IName ORDER BY ui.UNO), GROUP_CONCAT(ui.UNO ORDER BY ui.UNO), GROUP_CONCAT(ui.IUTally ORDER BY ui.UNO)
FROM images 
LEFT JOIN ui ON images. INO = ui. INO
GROUP BY images. INO
ORDER BY ui. UNO = $uno DESC";

请告诉我这是否有帮助,或者您正在寻找其他任何内容。

答案 1 :(得分:0)

以下是首先对结果进行排序然后对其进行分组的方法,但这个技巧包括子选择,在单个查询中,您无法在ORDER BY之前使用GROUP BY,因此请尝试使用此选项

SELECT q.* FROM (
SELECT images.INO, images. IName, ui. UNO, ui. IUTally
FROM images 
LEFT JOIN ui ON images. INO = ui. INO   
ORDER BY ui. UNO = $uno DESC
) q GROUP BY q. INO

它将首先订购您的结果,然后将它们分组