2016-04-25 64 views
0
SELECT 
    v.ID, 
    v.PhotoID, 
    COUNT(*) AS Cnt, 
    p.PhotoWidth, 
    p.Dir 
FROM `views` v 
JOIN `photos` p 
    ON v.PhotoID = p.ID 
GROUP BY v.PhotoID DESC 
ORDER BY Cnt DESC 

我有上面的MySQL命令。这很好用,但在照片列表中,每张照片都链接到一个目录ID。选择一行

我现在想要的只是每个目录ID中的一行。

我该怎么做?

+0

如果您使用正在使用的表格的架构更新了此问题,将会有所帮助。 – jwatts1980

回答

1

您需要删除其他列。您需要将聚合函数应用于除下面的目录id之外的所有列。如果你需要其他列应用聚合函数到所有列,如在计数。我用1而不是*来提高查询性能。

 
SELECT 
    COUNT(1) AS Cnt, 
    p.Dir 
from `photos` p 

GROUP BY p.Dir DESC 
ORDER BY Cnt DESC 

更新:

所以,如果你想用下面的查询将有助于在最顶部的观点得到PHOTOID。

 
SELECT 
    p.ID, 
    v.CountRec AS Cnt 

FROM `photos` p 
join 
(select PhotoID, count(1) CountRec from `views` group by PhotoID) v 
    ON p.ID= v.PhotoID 
ORDER BY Cnt DESC 
+0

但我试图让照片获得最多的观点。 – kiwis