从多个表中获取相应的和非对应的值

时间:2016-06-10 11:48:14

标签: php mysql sql zend-framework zend-framework2

我有一个如下表格结构:

品牌=>历史< =用户

历史是多对多的表并包含以下值:

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,如果不是,它应该总结列中显示的所有点......

1 个答案:

答案 0 :(得分:0)

我想你只想要一个left joingroup 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;