MYSQL JOIN&计数

时间:2013-06-13 06:40:56

标签: php mysql join count

有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

2 个答案:

答案 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)

使用inexists

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服务器相对的语法差异,我更熟悉。