加入三张桌子

时间:2012-02-01 00:03:17

标签: php mysql join

我正在尝试从三个不同的表中获取数据,并使用尽可能少的查询和尽可能少的PHP代码输出它。

下面列出了我拥有的表格和每个表格中的列(仅列出相关列)。

exp_members(A)
columns:member_id,group_id

exp_brandrelations(B)
columns:member_id,brand_id

exp_du_mktgmats(C)
列:du_id,brand_id,日期

我想遍历属于group_id ='5'(来自A)的成员,确定哪些品牌被分配给每个成员(来自B),并获得与每个成员相对应的du_ids(来自C)的列表会员,已在过去24小时内被插入。

到目前为止,我可以获得第5组中的成员列表:
    SELECT member_id, brand_id FROM exp_brandrelations
    WHERE member_id IN (SELECT member_id FROM exp_members where group_id = 5)

我可以获得过去24小时内的du_ids列表:
    SELECT du_id FROM exp_du_mktgmats
    WHERE date >= DATE_SUB(NOW(), INTERVAL 1 DAY)

但我不确定如何最好地将它们捆绑在一起。

3 个答案:

答案 0 :(得分:1)

应该这样做!

SELECT m.member_id, b.brand_id, d.du_id FROM exp_members m, exp_brandrelations b, exp_du_mktgmats d WHERE m.group_id = '5' AND m.member_id = b.member_id AND b.brand_id = d.brand_id AND d.date >= DATE_SUB(NOW(), INTERVAL 1 DAY)

答案 1 :(得分:1)

SELECT du_id FROM exp_members m, exp_brandrelations r, exp_du_mktgmats a
WHERE a.brand_id=r.brand_id AND r.member_id=m.member_id
AND date >= DATE_SUB(NOW(), INTERVAL 1 DAY)
AND m.group_id='5'

答案 2 :(得分:0)

SELECT 
    c.du_id
FROM 
    exp_du_mktgmats c
LEFT JOIN
    exp_brandrelations b
ON
    c.brand_id = b.brand_id
LEFT JOIN
    exp_members a
ON
    b.member_id = a.member_id
WHERE
    a.group_id = 5
AND
    c.date >= DATE_SUB(NOW(), INTERVAL 1 DAY);