画像ID、タイトル、アップロードしたユーザー、タイムスタンプ、ファイル拡張子を格納する画像テーブルがあります。
また、画像がいつ表示されたかを記録するビュー テーブルもあります。列は、id、画像 ID、タイムスタンプ、および画像を閲覧したユーザーです。
私が必要としている方法と方法がわからないのは、最も閲覧された順に一連の画像を返す SQL クエリを実行することです。
私はこことGoogleを見回してきましたが、実際に何を検索すればよいかわかりません.
SELECT images.*, count(views.view_id) view_count
FROM images
LEFT JOIN views on views.image_id = images.image_id
GROUP BY images.image_id
ORDER BY view_count DESC
http://sqlfiddle.com/#!2/a669b/5
GROUP BY 句は、「集計関数」 (count、sum、min、max など) にどのように動作するかを指示します。この場合、画像ごとにグループ化し、画像ごとのビュー数を取得しています。COUNT
null 以外の値のみをカウントし、存在しないビューをカウントしたくないので、キーをオフにしviews.view_id
ます。
LEFT JOIN ではなく INNER JOIN を実行すると、ビューを持つ画像のみが返されます。LEFT JOIN を使用すると、ゼロのカウントを取得できます。
結合を確認し、画像テーブルを画像表示テーブルに結合する必要があります。その後、両方のテーブルで 1 つのクエリを実行できます。