连接三张桌子


Joining Three Tables

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

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

exp_members(A)
列:member_id、group_id

exp_brandrelationships(B)
列:member_id、brand_id

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

我想循环浏览属于group_id='5'(来自A)的成员,确定哪些品牌分配给每个成员(来自B),并获得与每个成员对应的du_id(来自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_id列表:
SELECT du_id FROM exp_du_mktgmats
WHERE date >= DATE_SUB(NOW(), INTERVAL 1 DAY)

但我不知道如何最好地把这一切联系在一起。

应该这样做!

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)
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'
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);