2017-01-01 2 views
-2

私はページの合計数がSELECTになりたいと思っています。私はお互いに共通のユーザーデータベースを持っています。私は他のユーザーと共通しているページの総数を選択してください

私は...

SELECT 
    l.item_id, 
    l.uid, 
    COUNT(l.item_id) 
FROM 
    pages_likes l 
WHERE 
    l.uid IN (NOT NULL, 544) 
GROUP BY 
    l.uid 

をこの文をしようとしている...それだけでページが好きで、私のユーザIDの私自身の総数の1つのレコードを出力します。この例では、私のユーザーIDは544です。

私は期待したように複数のレコードの代わりに1つのレコードを取得するだけです。このレコードには、異なるユーザーID(別名uid)と好きな数の合計が表示されます。

私のWHERE - 条件は明らかに間違っています。私はこの問題を解決するために他にどのような可能性があるのか​​アドバイスに感謝します。

page_likes構造: iditem_iduiddate

+0

'l.uid IN(NOT NULL、544)'は意味がありません。 'NOT NULL'はあなたが比較できる特定の値ではありません。 – Barmar

+0

正確にはどういう意味ですか? @GurwinderSingh私は他のユーザーと共通しているすべてのページの好きなものが必要だと説明しましたが、私は自分のユーザーIDを含むSELECT文を書く方法を知らず、他のユーザーIDはブランク。だから私はNOT NULLを使ったのです。 – AlexioVay

+0

「他のすべてのユーザーと共通している好きなもの」とはどういう意味ですか?それはすべてのユーザーが好きなアイテムの数ではありませんか? – Barmar

答えて

1

はこれを試してみてください:

SELECT 
    l1.uid, 
    COUNT(*) AS common_likes 
FROM 
    page_likes AS l1 
JOIN page_likes AS l2 ON l1.item_id = l2.item_id 
WHERE 
    l1.uid != 544 
AND l2.uid = 544 
GROUP BY l1.uid 
ORDER BY 
    common_likes DESC 

これは、それ自体でpage_likesテーブルのサブセットを結合します。 1つのサブセットは他のユーザーが好きなものです。もう1つはあなたの好きなものです。次に、他のユーザーとペアになっているアイテムの数を数えます。

+0

このステートメントでは、「common_likes」カウントが1000に近いユーザーIDのレコードを1つだけ取得します。しかし、このユーザーのプロファイルにアクセスすると、これが本当かどうかを確認するために、彼に4人の好きな人がいます。また、私はよく好きなユーザーがいます。 – AlexioVay

+0

申し訳ありませんが、私は 'GROUP BY'を忘れました。 – Barmar

+0

私はこのソリューションが同じテーブルに巧みに参加していると思っていますが、変更が必要なことがあります。 ** common likes **の代わりに**特定のユーザーの** likes **の総数を取得しているようです。また 'JOIN'の直後にタイプミスがあります(' AS l2'の代わりに 'AS ll2')。 – AlexioVay

関連する問題