同じユーザーや複数のユーザーが挿入したMySQLで一意のデータを表示する方法はありますか?
私はこの方法で項目を合計したいのitem_id = 7777
でのレコードで、この表を考えてみましょう。
- たとえば、最初の2つのレコードは1とみなされます(両方とも がguest_id = 1111によって挿入されます)。 id => 99の最後の値を取る。「下」の値が「上」の値より大きい。
- 101から103までは、最後の1つ(103)、最終的にはup = 0、down = 12です(したがって、最後のレコードでは「1」だけインクリメントされます) "down"の値がupより大きい)
- 最後の2つのレコードはユニークなguest_idであり、両方ともup => 1であるため、 "up"は2回インクリメントされます。
結果(count_up = 2、count_down = 2)
私は、クエリを書いたが、私はそれが最善かつ高速であるかどうかわからないです。
SELECT COUNT(DISTINCT IF(up > 0, USER, NULL)) AS voters_up, COUNT(DISTINCT IF(down > 0, USER, NULL)) AS voters_down
FROM `items_votes` AS itemA
LEFT JOIN (
SELECT IF(guest_id IS NULL, user_id, guest_id) AS USER, MAX(id) AS id, item_id
FROM items_votes
WHERE item_id = 7777
GROUP BY guest_id,user_id) AS itemB ON itemA.id = itemB.id
WHERE itemA.item_id = 7777
これは上記のクエリで、私が期待しているとおりに返します。
しかし、このクエリは一つだけのアイテムの一意の合計を返します。 item_idの "where condition"を削除しても、クエリは機能しません。
どのようにitem_idをすべて同じにするか?
すべての商品のユニークな上記の返品のお問い合わせにお手伝いください。
あなたのクエリが合理的です。 –
ですが、item_id条件を削除すると、すべてのitems_idに対して1つのitem_idを実行します。それは動作しません。 – Shahid