有3个表...需要选择尚未预订下周课程的用户,并发送电子邮件。
想想我正在看
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 :(得分: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
这是连接的直观视觉表示。
答案 1 :(得分: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服务器相对的语法差异,我更熟悉。