items
、purchases
、およびの3 つのテーブルがありcollaborators
ます。ユーザーは、アイテムを所有したり、アイテムを購入したり、アイテムのコラボレーターになることができます。さらに、購入したアイテムは、評価を上げたり+1
、下げたりすることができます-1
。所有者または共同編集者は、自分のアイテムを購入できません。
特定のユーザーのすべてのアイテムを取得し、各アイテムの評価も表示したいと思います。
ここに私のテーブルがあります:
items | purchases | collaborators
i_id item_id user_id | p_id item_id user_id rating |c_id item_id user_id
1 1 11 | 1 1 13 -1 | 1 1 12
2 2 12 | 2 2 11 1 | 2 2 13
3 3 13 | 3 3 12 NULL |
| 4 1 14 -1 |
これまでのMYSQLクエリは次のとおりです。
select *, count(p_id) as tots, sum(rating=1) as yes, sum(rating= '-1') as no
from items
left join purchases
on items.item_id=purchases.item_id
left join collaborators
on items.item_id=collaborators.item_id
where items.user_id=13 or purchases.user_id=13 or collaborators.user_id=13
group by items.item_id
これが私の予想される結果ですuser_id=11
(句のそれぞれ user_id
を変更する):WHERE
item_id tots yes no
1 2 0 2
2 1 1 0
// notice how user_id=11 doesn't have anything to do with item_id=3
の期待される結果は次のuser_id=12
とおりです。
item_id tots yes no
1 2 0 2
2 1 1 0
3 1 1 0
の期待される結果は次のuser_id=13
とおりです。
item_id tots yes no
1 2 0 2
2 1 1 0
3 1 1 0
//notice user_id=13 should have same results as user_id=12. Although, their
relation to each of the 3 items is different, they still either purchased,
own, or collaboratored on each of them.
残念ながら、最初の 2 つの結果は得られましたが、 の正しい結果ではありませんuser_id=13
。なんらかの理由で、私には理解できませんuser_id=13, item_id=1
。tots=1
tots=2
「これは2つのクエリに分けたほうがいい」など、ご意見いただければ幸いです。