0

我有一个我正在尝试解决的问题。

我正在尝试将更多逻辑放入我的 sql 调用中,以减少 php 必须执行的操作。一个这样的地方是确定用户是否已阅读某条消息的逻辑。它可以工作,但效果太好了,这是 SQL:

SELECT t.* FROM comment c
LEFT JOIN read_message rm ON c.id-rm.cid
WHERE c.author!=2 AND rm.User=2 AND c.tid=17 AND rm.Topic=17 AND c.Original_Date >=  UNIX_TIMESTAMP()-3600*24*30 OR c.last_update >= UNIX_TIMESTAMP()-3600*24*30

问题是无论输入什么消息 ID,它总是会显示每条被认为是新的记录,但我希望它仅在 id 匹配时才显示。

简化我想要的:

根据消息 ID,我们可以查看用户是否已经阅读了此消息,但如果该消息超过 30 天,则自动将其视为旧消息。

问题是 30 天的数学,如果我把那部分拿出来它可以正常工作,但我希望它忽略任何超过 30 天的东西。

我在标签中列出了 codeigniter,因为这是我正在使用的框架,以防你需要知道这一点。

4

1 回答 1

1

如果您使用的是 mysql,您应该能够使用以下 SQL 来获取最近 30 天内的消息。

SELECT t.* FROM comment c
LEFT JOIN read_message rm ON c.id-rm.cid
WHERE c.author!=2 AND rm.User=2 AND c.tid=17 AND rm.Topic=17 AND
(c.Original_Date BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW())
OR (c.last_update BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW())

与此类似的东西应该适用于您的示例。

于 2012-11-20T00:30:06.580 回答