Соединение трех столов - PullRequest
0 голосов
/ 01 февраля 2012

Я пытаюсь взять данные из трех разных таблиц и вывести их, используя как можно меньше запросов и как можно меньше PHP-кода.

Ниже перечислены мои таблицы и столбцы в каждой (перечислены только соответствующие столбцы).

exp_members (A)
столбцы: member_id, group_id

exp_brandrelations (B)
столбцы: 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)

И я могу получить список du_ids за последние 24 часа:
SELECT du_id FROM exp_du_mktgmats
WHERE date >= DATE_SUB(NOW(), INTERVAL 1 DAY)

Но я не уверен, как лучше связать все это вместе.

Ответы [ 3 ]

1 голос
/ 01 февраля 2012
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'
1 голос
/ 01 февраля 2012

Это должно сделать это!

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 голосов
/ 01 февраля 2012
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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...