我有一个如下表格结构:
品牌=>历史< =用户
历史是多对多的表并包含以下值:
brandId, userId and points
我需要为所有品牌提供USER SCORED积分,以及用户没有相应价值的所有品牌。它看起来像这样:
brandId => 1 (has corresponding value) => 5 points
brandId => 2 (no corresponding value) => null (column points is null)
依旧......
有人可以帮我解决这个问题吗?
编辑:
尊敬的戈登,我已将您的查询修改为:
select b.*, sum(h.points) as points
from brands b left join
histories h
on b.id = h.brandId
and h.userId = 2866 and h.brandId = 2
group by h.brandId
我需要第二个条件h.brandID = 2 //或其他一些值,以便它一次只返回1条记录,如果没有记录,我希望列指向null,如果不是,它应该总结列中显示的所有点......
答案 0 :(得分:0)
我想你只想要一个left join
和group by
:
select b.brandId, sum(h.points)
from brands b left join
histories h
on b.brandid = h.brandid and h.userId = $userId
group by b.brandId;
如果用户的histories
中没有行,则该值为NULL
。
编辑:
如果您使用的是left join
,则group by
应位于第一个表的列中:
select b.*, sum(h.points) as points
from brands b left join
histories h
on b.id = h.brandId and
h.userId = 2866 and h.brandId = 2
group by b.brandId;