1

有3张桌子... 需要选择下周还没有预订课程的用户,并发送电子邮件。

想我在看

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

这可以选择日期范围......但是我在将其加入预订以查看他们是否已预订时遇到问题,如果他们没有,那么我需要获取他们的电子邮件地址......我' d 宁愿不使用 PHP 循环和查询数据。我显然只想运行单个查询。

正如您可能会说的那样,我不知道 MYSQL。

帮助表示赞赏。谢谢。

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


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


BOOKINGS
-----------
ID | LESSON_ID | USER_ID, ETC
4

2 回答 2

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

这应该会吸引所有没有预订下周课程的用户。

看看JOIN 简介 - JOIN 基础

这是连接的直观表示。

于 2013-06-13T06:44:45.380 回答
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 Server 可能存在语法差异。

于 2013-06-13T06:50:17.450 回答