为什么MySQL查询中的三行输入顺序不正确?

时间:2012-08-03 06:47:08

标签: mysql sql sql-order-by

我不知道这是MySQL的错误还是我的错,但它真的开始让我紧张。

要获得用户的答案,我使用此查询(这也确保问题不会被删除或隐藏):

  SELECT *
    FROM answers a
    JOIN questions q
      ON a.questionid = q.qid
   WHERE a.userid = <uid> -- query parameter
     AND a.deleted = 0
     AND q.hidden = 0
     AND q.deleted = 0
ORDER BY a.created DESC

问题在于,所有答案都按照创建时间的时间戳顺序排列,之外的三个答案。在我的个人资料中的答案屏幕截图中,请查看有关“此问题与订购有问题......”的问题的答案日期:

enter image description here

我真的不知道发生了什么。如您所见,MySQL查询具有ORDER BY a.created DESC


我尝试了什么?

好吧,我尝试了很多东西,比如回显存储在数据库中的Unix时间戳,它们都是正确的。

我尝试的另一件事是在时间戳上调用strtotime(),但这只给了我更多的问题:第一个奇怪地变成了一个巨大的负数并显示 1717年8月3日但其他人都是空白的,因此说 1969年12月31日


修改

看起来其他几行也混淆了。


解决方案

我发现questions表和answers表都有一个created列。我通过执行SELECT *, a.created as ans_created, q.created as q_created来解决这个问题,现在可行了。感谢所有帮助过的人。

2 个答案:

答案 0 :(得分:2)

我只想回答我自己的问题,因为我发现了问题所在。

我发现问题表和答案表都有一个created列。

问题是我在查询中按a.created排序,但因为在PHP中我显示了$row['created']的日期,所以它正确排序,但显示的日期/时间不正确。 /强>

我通过做...来解决这个问题。

SELECT *, a.created as ans_created, q.created as q_created 

然后在我的PHP中我只做$row['ans_created']

感谢所有在评论和其他答案中提供帮助的人。 :)

答案 1 :(得分:1)

CAST列上尝试a.created

ORDER BY CAST(a.created AS DATETIME) DESC;

如果您使用的是INT字段,请尝试:

ORDER BY CAST(a.created AS UNSIGNED INTEGER) DESC;