2013-09-16 149 views
1

目标:连接两个表,由一列(ui.UNO),然后GROUP BY(images.INO)排序。多表查询ORDER BY然后GROUP 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 

$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

我想你混淆了'GROUP BY'和'WHERE'条款。因为你说“ui.UNO = $ UNO”,它首先检查命令,如果它是真的还是假的,然后返回1或0 –

+0

什么是您预期的结果? – Shafeeque

+0

嗨马蒂,我不知道我得到你100%,如果我不使用GROUP BY我得到重复的结果,我想到GROUP BY的唯一原因是因为它做我所需要的,但不是与ORDER BY,所以它似乎是或者,或者是另一种选择。谢谢你的帮助。 – user2784408

回答

0

这里是一阶的结果的一种方式,然后将它们分组,但这一招包括子选择,在单个查询不能使用ORDER BYGROUP 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 

它将一阶您的结果,然后将它们分组

+0

谢谢Dianuj,我会尝试并报告回来。 – user2784408

+0

我已经尝试过您的代码Dianuj但没有运气,ORDER BY被GROUP BY覆盖,无论如何感谢您的帮助。 – user2784408

+0

只是注意,结果重新排序由ORDER BY数字上升,有没有什么帮助? – user2784408

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

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

+0

谢谢Abhijit,我会放弃它。 – user2784408