2013-06-13 3 views
1

Есть 3 таблицы ... Вам нужно выбрать пользователей, которые не заказали урок на следующей неделе, и отправить электронное письмо.MYSQL JOIN & COUNT

Думает, что я смотрю на

WHERE `LESSONS`.`DATE` > CURDATE() 
    AND `LESSONS`.`DATE` <= (CURDATE() + INTERVAL 7 DAY) 

Это работает, чтобы выбрать диапазон дат ... Но я тогда возникает проблемы, соединяющие что бронирования, чтобы увидеть, если они заказали, и если они НЕ ИМЕЮТ, что мне нужно захватить их адрес электронной почты ... Я бы предпочел не использовать PHP для обработки и запроса данных. Я просто хочу запустить единственный запрос.

Как вы, вероятно, можете сказать, что я не знаю, когда дело доходит до MYSQL.

Помогите оценить. Благодарю.

USERS 
----------- 
ID | EMAIL, ETC 


LESSONS 
----------- 
ID | DATE, ETC 


BOOKINGS 
----------- 
ID | LESSON_ID | USER_ID, ETC 
+0

Взгляните на это: http://www.tizag.com/mysqlTutorial/mysqljoins.php – Matheno

ответ

1

Вы можете попробовать что-то вроде

SELECT u.* 
FROM USERS u LEFT JOIN 
    Bookings b ON u.ID = b.USER_ID LEFT JOIN 
    LESSONS l ON b.LESSON_ID = l.ID 
      AND l.DATE > CURDATE() AND l.DATE <= (CURDATE() + INTERVAL 7 DAY) 
WHERE l.ID IS NULL 

Это должно получить все пользователи, которые не имеют каких-либо заказы на уроки на следующей неделе.

Посмотрите Introduction to JOINs – Basic of JOINs

Это Nive визуальное представление объединения.

+0

Отлично. Это работает. Приветствия. –

0

in или exists?

SELECT users.* FROM users 
WHERE users.id NOT IN 
(SELECT Bookings.user_id FROM Bookings JOIN Lessons ON Bookings.lesson_id = lessons.id 
WHERE lessons.date > CURDATE() AND lessons.date <= (CURDATE()+INTERVAL7 7 DAY) 

Могут существовать синтаксические различия в MySQL, противоположные SQL-серверу, с которыми я больше знаком.