我不知道这是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
问题在于,所有答案都按照创建时间的时间戳顺序排列,除之外的三个答案。在我的个人资料中的答案屏幕截图中,请查看有关“此问题与订购有问题......”的问题的答案日期:
我真的不知道发生了什么。如您所见,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
来解决这个问题,现在可行了。感谢所有帮助过的人。
答案 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;