首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySQL中保证基于日期和时间的正确排序

问如何在MySQL中保证基于日期和时间的正确排序
EN

Stack Overflow用户
提问于 2013-03-10 18:12:05
回答 4查看 78关注 0票数 0

我现在很困惑。我在mysql数据库中有一个注释表。在comments表中有一个字段comment_posted_time (类型为DATETIME),我像这样对所有评论进行排序

代码语言:javascript
复制
$query = "SELECT * FROM comments ORDER BY comment_posted_time DESC";

现在,这可能会产生错误的结果。我给你举个例子。假设有两个用户坐在电脑前,一个在印度,另一个在美国。假设印度的时间比美国快10个小时。首先,来自印度的用户发布一条评论,其当前本地时间存储在comment_posted_time (类型为DATETIME)中。1小时后,来自美国的用户发布一条评论,其当前本地时间也存储在comment_posted_time (类型为DATETIME)中。现在,在数据库中,来自美国用户最近发布的评论将不会被计入最新的评论,并且排序将不正确。

如何处理这种情况?

EN

回答 4

Stack Overflow用户

发布于 2013-03-10 18:23:21

你的用户在哪里是没有区别的,你的php和mysql在一台服务器上,所以你一定不会有时间的问题,你可以显示每个用户的时区,通过php转换它,但不要为每个用户更改mysql的默认时区。设计comments表并将其设置为comment_posted_time默认值NOW(),并且不要在插入查询中使用此字段。因此,该字段中的所有记录都将保存在同一时区。

票数 1
EN

Stack Overflow用户

发布于 2013-03-10 18:14:41

如何获取comment_posted_time的日期?通常,这将是MySQL服务器上的当前日期。如果您从客户机获取日期时间(我不推荐这样做),那么您可以获取UTC日期/时间,然后在显示它时将其转换回本地时间。

要存储MySQL服务器中的当前时间,您可以执行以下操作:

代码语言:javascript
复制
update comments set comment_posted_time = NOW() where id=...

这将根据客户端的不同而不同。

票数 0
EN

Stack Overflow用户

发布于 2013-03-10 18:17:35

您可以将日期转换为其UNIX_TIMESTAMP,然后按其排序。

代码语言:javascript
复制
$query = "SELECT * FROM comments ORDER BY UNIX_TIMESTAMP(comment_posted_time) DESC";

您可以阅读有关UNIX_TIMESTAMP()文档的更多信息。

编辑

您不应该存储相对于不同时区的comment_posted_time。所有的时间都应该与一个时区相关,比如GMT,或者运行php的机器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15321093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档