Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 多表查询顺序依据然后分组依据_Mysql_Sql - Fatal编程技术网

Mysql 多表查询顺序依据然后分组依据

Mysql 多表查询顺序依据然后分组依据,mysql,sql,Mysql,Sql,目标:连接两个表,按一列(ui.UNO)排序,然后按(images.INO)分组 问题:ORDER BY会像您预期的那样返回重复的结果,但由于我试图通过ORDER BY将当前用户的图像置于顶部,如果我仅按分组,则无论第一个结果是否链接到其他用户,都会显示第一个结果 在下表中,我正在寻找第二个结果,但是如果我使用GROUP BY,则只会显示第一个结果,并且任何链接数据(ui.iutaly)都将是错误的。 提前谢谢你的帮助 Images IN

目标:连接两个表,按一列(ui.UNO)排序,然后按(images.INO)分组

问题:ORDER BY会像您预期的那样返回重复的结果,但由于我试图通过ORDER BY将当前用户的图像置于顶部,如果我仅按分组,则无论第一个结果是否链接到其他用户,都会显示第一个结果

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

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

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


为了查看与其他用户链接的数据,您可能需要在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";

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

这里有一种方法,可以先对结果排序,然后对结果进行分组,但此技巧包括子选择,在单个查询中,您不能在
分组依据
之前使用
排序依据
,因此请尝试此方法

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

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

我认为您将
分组依据
WHERE
子句混为一谈。因为您按“ui.UNO=$UNO”排序,它首先检查它是否为真,然后返回1或0。您期望的结果是什么?嗨,Marty,我不确定我是否100%得到了您想要的结果,如果我不使用GROUP by,我会得到重复的结果,我考虑GROUP by的唯一原因是因为它满足了我的需要,但不与order by结合使用,因此,它似乎要么是要么,要么是另一种选择。谢谢你的帮助。嗨,Shafeeq,最终结果将是一个图像列表,用户位于顶部,以及他们的相关数据,即用户是否“喜欢”图像。谢谢。你能将你的表格结构添加到问题中吗?谢谢Abhijit,我会尝试一下。谢谢Dianuj,我会尝试一下并报告回来。我已经尝试了你的代码Dianuj,但是运气不好,ORDER BY被GROUP BY覆盖了,无论如何谢谢你的帮助。请注意,结果按ORDER BY的数字升序重新排序,如果有帮助的话?@user2784408可以添加带有您的小数据集的sql FIDLE,这将有助于其他人理解谢谢
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