Mysql查询不会是ORDER BY日期

时间:2010-01-02 02:45:03

标签: php sql mysql

我坚持使用以下查询,该查询不会按日期排序。任何帮助,或洞察我做错了什么将非常感激。该查询应该通过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

2 个答案:

答案 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')