0

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

$query = "SELECT * FROM comments ORDER BY comment_posted_time DESC";

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

如何处理这种情况?

4

4 回答 4

1

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

于 2013-03-10T10:23:21.470 回答
0

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

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

update comments set comment_posted_time = NOW() where id=...

这不会因客户而异...

于 2013-03-10T10:14:40.630 回答
0

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

$query = "SELECT * FROM comments ORDER BY UNIX_TIMESTAMP(comment_posted_time) DESC";

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

编辑

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

于 2013-03-10T10:17:35.357 回答
0

因此,如果您遇到问题,即您的用户位于不同的时区,您应该始终计算一个给定时区的时间点,然后再将其持久化(通常您采用主服务器时区,或​​默认为 UTC)。使用这种方法,您可以同时做到:按时间点排序并向用户显示计算到他们时区的时间点。

于 2013-03-10T10:17:46.367 回答