簡體   English   中英

僅顯示日期是否少於14天前

[英]Only show if date is less than 14 days ago

我有三張桌子 - 通知,通知和公司。 通知包含顯示在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')

如果我正確理解您的問題,您只需要使用DATE_SUB

DATE_SUB(SYSDATE(), Interval 14 Day)

完整的查詢將是:

Select
  notices.description,
  notices.id,
  notices.title,
  notices_read.company_id,
  companies.datestamp
From
  notices_read Left Join
  notices On notices_read.dismiss_id = notices.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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM