我有三张表——notices、notices_read 和 company。Notices 包含显示在 Web 应用程序中的客户通知列表,notices_read 指示他们已单击并阅读消息,因此在公司持有公司信息(包括其加入日期)时不会再次显示。此外,我只想将通知显示给加入时间超过 14 天的客户。
除了 14 天前的部分之外,一切正常 - 如果我删除该行,则通知正确显示取决于 notices_read 中是否有值,但如果我在其中添加日期行,虽然没有错误,但不会返回任何内容。
companies
+-----------------+
| id | datestamp |
+-----------------+
| 1 | 2012-12-20 |
| 2 | 2012-12-20 |
| 3 | 2012-11-20 |
| 4 | 2012-11-20 |
+-----------------+
notices_read
+-----------------------------+
| id | company_id | notice_id |
+-----------------------------+
| 1 | 3 | 1 |
+-----------------------------+
notices
+----------------------+
| id | title | active |
+----------------------+
| 1 | title1 | 1 |
| 2 | title2 | 0 |
+----------------------+
- 注意 2 不应显示,因为它未设置为活动
- 通知 1 不应显示给公司 1 或 2,因为它们不是 14 天
- 通知 1 不应显示给公司 3,因为它已被阅读
- 通知 1 应显示给公司 4,因为它尚未阅读且公司 4 已超过 14 天
这是我的查询:
Select
notices.description,
notices.id,
notices.title,
notices_read.company_id,
companies.datestamp
From
notices Left Join
notices_read On notices.id = notices_read.dismiss_id Left Join
companies On notices_read.company_id = companies.id
Where
notices.active = 1 And
companies.datestamp <= DATE_SUB(SYSDATE(), Interval 14 Day) And
(notices_read.company_id Is Null Or notices_read.company_id != '$company_id')