2016-04-25 20 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にリンクされています。行の1つを選択

私が今したいのは、各Dir IDから1行だけです。

どうすればいいですか?

+0

この質問を、作業中のテーブルのスキーマで更新した場合に役立ちます。 – jwatts1980

答えて

1

他の列を削除する必要があります。以下のようなディレクトリid以外のすべてのカラムに集約関数を適用する必要があります。 countのようなすべての列に他の列適用集計関数が必要な場合*の代わりに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

関連する問題