2012-02-01 122 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);