我坚持使用以下查询,该查询不会按日期排序。任何帮助,或洞察我做错了什么将非常感激。该查询应该通过thread_id获取一个条目,然后在线程中显示最新的帖子,就像论坛帖子一样,它做得很好。但是当我尝试使用ORDER BY子句从最新到最旧排序结果时,它似乎忽略了它。
$query = "SELECT *
FROM messages
WHERE (thread_id, received)
IN (SELECT thread_id, MAX(received)
FROM messages
WHERE receiver='$user' OR sender='$user'
AND is_hidden_receiver!='1'
GROUP BY thread_id)
ORDER BY received DESC";
干杯,Lea
答案 0 :(得分:2)
您使用PHP time()
函数生成要插入INT(11)
列的值。关于为什么排序不正确,我有点神秘。如果我弄清楚如何简明扼要地解释,我会更新这个答案。
此功能内置于MySQL中,它是TIMESTAMP
列类型。在对此解决方案感到满意之前,您应该read up on it a bit more。它有一些有趣的属性,取决于如何定义表,类型TIMESTAMP
的列可以作为创建时间戳或修改时间戳。
答案 1 :(得分:0)
问题是它真的没有按“收到”排序,或者你得到的结果与预期不同?它可以是where子句的操作顺序 - 我不确定AND或OR是否优先。也许尝试改变这个:
receiver='$user' OR sender='$user' AND is_hidden_receiver!='1'
到你想要的任何一个:
(receiver='$user' OR sender='$user') AND is_hidden_receiver!='1'
receiver='$user' OR (sender='$user' AND is_hidden_receiver!='1')