读取了检测注释的SQL

时间:2012-11-20 00:13:59

标签: sql codeigniter-2

我有一个问题,我试图解决。

我正在尝试将更多逻辑放入我的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,因为这是我正在使用的框架,以防您需要知道这一点。

1 个答案:

答案 0 :(得分: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())

类似的东西应该适用于你的例子。