1

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

问题:ORDER BY 如您所料返回重复的结果,但是当我试图 ORDER BY 将当前用户图像置于顶部时,如果我 GROUP BY 仅显示第一个结果,无论它是否链接到另一个用户。

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

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

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

.

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
4

2 回答 2

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";

让我知道这是否有帮助,或者您正在寻找其他任何东西。

于 2013-09-16T17:46:35.213 回答
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

它会首先对您的结果进行排序,然后将它们分组

于 2013-09-16T17:54:32.090 回答