目标:加入两个表,按一列(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
答案 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
它将首先订购您的结果,然后将它们分组