我有 3 个表:items
、purchases
和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.
不幸的是,我得到了前两个结果,但不是正确的user_id=13
。出于某种原因user_id=13, item_id=1
,我无法理解tots=1
。tots=2
任何想法,例如“最好将其分成 2 个查询”,将不胜感激,