0

假设我有一个包含三个字段的数据库表:id、内容和时间戳。

条目一整天都在进来,所以有大量的条目和条目仍然会定期进入。

当访问者查看将显示条目的我的网页时,该页面将显示 10 个最新的以及访问者在页面上时出现的任何新条目。

我就这个问题发表了一个类似的帖子,我得到的唯一答案是“使用限制”,但如果这会在访问者在页面上时禁止任何新条目进入,我没有得到回应。

这就是我的意思...我想对我的数据库进行查询,然后根据常量 NOW() 变量检查每个条目的时间戳。我想限制查询及时返回的数量,但让未来的帖子无限开放。

4

4 回答 4

1

LIMIT在 SELECT 语句中使用对 INSERTS、UPDATES 或 DELETES 没有影响。它仅确定将从 SELECT 查询返回的行子集。

要在用户查看页面后获取已插入的行,您需要运行后续查询。您可能会通过 AJAX 执行此操作。或者,您可以使用某种长轮询或套接字机制来执行此操作。

于 2012-05-11T15:39:16.023 回答
1

如果我没有完全回答你的问题,请耐心等待。如果我理解正确,这个问题似乎可以通过执行两个查询来解决。

-- for the 10 most recent on page load
SELECT timestamp, content FROM table WHERE timestamp < NOW() LIMIT 10; 

然后将最新项目的时间戳存储在一个变量中,我假设您可以在 AJAX 调用中使用该变量来获取“实时”中的内容,并使用该时间戳来查询未来的项目。

SELECT timestamp, comment FROM table where timestamp > $last_timestamp LIMIT 10;

但是,我仍然会限制查询数量并继续存储最后一个时间戳,以免遇到用户坐在页面上并且随着输入新帖子而查询结果越来越大的问题。

于 2012-05-11T15:45:25.860 回答
0

如果我已经理解了你的问题,我认为有一个解决方法可以使用普通的 javascirpt 和 MySql 来解决这个问题。

你必须做的是加载网页中的 10 个最新行,并将最新的 ID 保存在一个变量中。

加载页面后,您可以放置​​一个通过 ajax 查询后端的 javascript 方法,使用带有计时器的无限循环查找,如果数据库中的 ID 比您存储在变量中的 ID 高,则获取新行。

我希望我帮助了你

于 2012-05-11T15:47:09.133 回答
0

拿表:

######################################
# id #  content  #      timestamp    #
######################################
#  1 # something # YY-MM-DD 12:00:00 #
#  2 # something # YY-MM-DD 11:59:00 #
#  3 # something # YY-MM-DD 11:58:00 #
#  4 # something # YY-MM-DD 11:57:00 #
######################################

现在,如果您执行一个查询,返回所有时间戳 < NOW() 的行,现在是YY-MM-DD 12:01:00,您将只返回表中的 4 个结果。您可以使用 limit 来设置要检索的最大行数,但它只会限制匹配限制为 <NOW() 的行。

当用户查看上一个查询返回的行列表时,更多的行被添加到表中

######################################
# id #  content  #      timestamp    #
######################################
#  5 # something # YY-MM-DD 12:00:02 #
#  6 # something # YY-MM-DD 12:00:03 #
######################################

由于在运行前一个查询时这些行不存在,因此查询无法返回。即使它们确实存在, NOW() 在运行时也会转换为时间戳,YY-MM-DD 12:01:00因此实际上之前的查询正在返回时间戳 < 的所有行YY-MM-DD 12:01:00。由于新行具有时间戳 >,YY-MM-DD 12:01:00因此它们不会被返回。

为了返回这些新行,您必须再次执行查询,除非您刷新使用 AJAX 或 JQUERY 的页面,否则将无法完成。简而言之,您的查询可以而且只会返回表中已经存在的行列表。它不能返回在查询运行后添加的那些。

于 2012-05-11T16:06:22.443 回答