4

ダウンロード可能なすべてのアイテムのレコードを含む 1 つのテーブルと、ダウンロード日、アイテムの ID、およびそれをダウンロードしたユーザーを含む各ダウンロードのレコードを含む別のテーブルがあります。

データベースからアイテムのリストを取得するときに、アイテムがダウンロードされた回数をクエリで検索し、これを他のアイテム データに含める必要があります。

ここに私のSQLがあります:

SELECT t1.*, 
(SELECT COUNT(*) 
    FROM tl_downloads 
    WHERE item_id = t1.id
    AND download_date > ?) 
AS downloads_count 
FROM tl_items AS t1 
ORDER BY downloads_count DESC

上記のクエリは、結果に正しいカウントを含む「downloads_count」という追加の列を取得するという意味では正常に機能しますが、この値で注文することはできません。

サブクエリで返された値で結果を並べ替えるにはどうすればよいですか?

さらに情報が必要な場合はお知らせください。

編集 - サンプルデータ

tl_items                tl_downloads

id  name                id  item_id  download_date
1   Item 1              1   1        1385964000 
2   Item 2              2   1        1385964000
3   Item 3              3   3        1385964000

私が期待する結果は次のとおりです。

Item 1 - Downloads 2
Item 3 - Downloads 1
Item 2 - Downloads 0

ありがとう

4

3 に答える 3

14

試す、

SELECT  t1.*, 
        s.totalCount AS downloads_count 
FROM    tl_items AS t1 
        LEFT JOIN
        (
            SELECT  item_id, COUNT(*) totalCount 
            FROM    tl_downloads 
            WHERE   download_date > ?
            GROUP   BY item_id
        )  s ON s.item_id = t1.id
ORDER   BY downloads_count DESC
于 2013-02-18T15:29:02.033 に答える
0

0ダウンロードが結果に含まれることを期待し、ダウンロード日付の制約があることは、私が見落としている場合を除いて、私にとって矛盾しているようです。

SELECT tt1.id, COUNT(tt2.id) AS DOWNLOAD_COUNT
FROM t1_items tt1
LEFT JOIN t1_downloads tt2 ON tt1.id = tt2.item_id
WHERE download_date > 1385963000 OR download_date IS NULL
GROUP BY tt1.id
ORDER BY DOWNLOAD_COUNT DESC

上記のクエリは、期待される結果を返します。

http://www.sqlfiddle.com/#!2/29b39/13

于 2013-02-18T16:54:00.467 に答える