0

事実、これは以前に数回尋ねられたことを知っていますが、これに関連する答えられた質問はどれもうまくいかないようであるか、私にとってあまりにも混乱しているようです..

おそらく説明する必要があります。

「いいね」の数で結果を並べ替えるために実行する AJAX スクリプトを作成しようとしています。

私の現在のコードはこれです:

SELECT COUNT(*) AS total, likes.palette_id, palette.*
FROM likes LEFT JOIN palette ON likes.palette_id = palette.palette_id

GROUP BY likes.palette_id 
ORDER BY total DESC

これは正常に機能しますが、明らかな理由で「いいね」が 0 の結果はリストされません。それらはテーブルに存在しません。

現在のテーブルの画像を添付しました:

いいねテーブル: http://imgur.com/EGeR3On

パレットテーブル: http://imgur.com/fKZmSve

ユーザーが「いいね」をクリックするまで、お気に入りテーブル結果はありません。その後、データベースが更新され、palette_id と user_id が挿入されます。

likes テーブルで *palette_id* が発生する回数をカウントしようとしていますが、likes テーブルに表示されないすべてのパレットに対しても 0 を表示します。

これは可能ですか?もしそうなら、誰かが私を助けてくれますか?

ありがとうございました

4

3 に答える 3

1

これを試して:

SELECT COUNT(likes.palette_id) AS total, palette.palette_id, palette.*
FROM palette LEFT JOIN likes ON likes.palette_id = palette.palette_id
GROUP BY palette.palette_id 
ORDER BY total DESC

編集:

GROUP BY に含まれていない列の一覧表示に関する議論に関しては、このMySql ドキュメント ページに適切な説明があります。

MySQL は GROUP BY の使用を拡張して、選択リストが GROUP BY 句で指定されていない非集計列を参照できるようにします。これは、前述のクエリが MySQL で有効であることを意味します。この機能を使用すると、不要な列の並べ替えやグループ化を回避してパフォーマンスを向上させることができます。ただし、これは主に、GROUP BY で指定されていない各非集計列のすべての値が各グループで同じ場合に役立ちます。サーバーは各グループから任意の値を自由に選択できるため、それらが同じでない限り、選択された値は不確定です。

この例では、GROUP BY に追加されていないパレット情報は各グループで同じになります。

于 2013-10-25T02:00:59.860 に答える
1

これは正確な MySQL 構文ではない可能性があります (私は SQL Server に慣れています) が、必要に応じて変換するのは非常に簡単です。

SELECT p.*, IFNULL(l.total, 0) AS total
FROM palette p
LEFT JOIN (
    SELECT palette_id, COUNT(*) AS total
    FROM likes
    GROUP BY palette_id
) l
ON l.palette_id = p.palette_id
ORDER BY total
于 2013-10-25T02:01:02.920 に答える