我有一个问题,我试图解决。
我正在尝试将更多逻辑放入我的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,因为这是我正在使用的框架,以防您需要知道这一点。
答案 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())
类似的东西应该适用于你的例子。