2012-02-01 106 views
0

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

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

exp_members(A)
列:member_id,GROUP_ID

exp_brandrelations(B)
列:member_id,brand_id

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

I想要循环属于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_ids的列表:
SELECT du_id FROM exp_du_mktgmats
WHERE date >= DATE_SUB(NOW(), INTERVAL 1 DAY)

但我不知道如何最好地将它们结合在一起。

回答

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) 
+0

这正是我需要的...直到我决定我需要在2个表中JOIN:对,但这确实让我在正确的轨道上。 – Jazzerus 2012-02-01 05:54:05

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