我正在为拍卖网站设置一个新的数据库方案,并尝试向用户发送电子邮件,以查找他们正在寻找的特定商品。我有三张桌子:
auctions
- 用户发布的每个项目都会在此处输入一个条目,其中包含标题,googleID,当前出价等。
alerts
- 这些是由用户设置的,它们包括他们正在寻找的项目的googleID,他们的用户ID,启用的布尔值和时间戳
notifications
- 这会跟踪哪些用户已被提醒有关哪些项目,这样我们就不会在每次运行cron.php时向同一用户提醒相同的项目。包括提醒ID和拍卖ID
所以我正在尝试创建一个选择以下内容的查询:
alerts
表格alerts
表中的googleID与auctions
表auctions
表格notifications
表中的拍卖ID不在同一行(这是我遇到问题的部分。我需要确保一个拍卖ID可以为其发送多个警报,但从来没有相同的拍卖任何用户多次)这是我到目前为止的查询,但我真的被困在最后一部分而且我看到了我能想到的所有地方。希望我已经足够解释了,如果有任何澄清会有所帮助并提前感谢,请告诉我!
$sql = "SELECT a.user, b.id, b.title, b.googleimg, b.authors
FROM alerts a, auctions b, notifications c
WHERE a.googleID = b.googleid AND a.enabled = 'y' AND b.closed = 0 AND ????";
答案 0 :(得分:1)
怎么样 -
SELECT
alerts.user,
auctions.id,
auctions.title,
auctions.googleimg,
auctions.authors
FROM alerts
INNER JOIN auctions
ON alerts.googleID = auctions.googleID
LEFT JOIN notifications
ON alerts.alertID = notifications.alertID
AND auction.auctionID = notifications.auctionID
WHERE alerts.enabled = 'y'
AND auction.closed = 0
AND notifications.alertID IS NULL
答案 1 :(得分:0)
将语法更改为现代JOIN语法
SELECT a.user, b.id, b.title, b.googleimg, b.authors
FROM alerts a
JOIN auctions b ON b.googleID = a.googleID
JOIN notifications c ON C.auctionID = b.auctionID AND a.alertID<>c.alertID
WHERE a.enabled = 'y' AND b.closed = 0
前两个表与您正在执行的操作相同。第三个联接会查找与此次竞价相关的所有通知,其中提醒中的alertID尚未位于通知中。