PHP-在每次页面加载时显示数据库中的下一行


PHP - Showing the next row from database on each pageload

我需要能够在每次页面加载时显示数据库中的下一个引号。我怎样才能做到这一点?

我能想到的唯一解决方案是:

1. SELECT counter FROM certain_table
2. SELECT COUNT(*) as num_of_quotes FROM quotes
3. counter = (counter + 1) % num_of_quotes;
4. SELECT * FROM quotes LIMIT counter, 1
5. Show quote
6. UPDATE certain_table SET counter = {counter}

但这意味着每次将执行4个SQL查询来显示一个报价。有什么方法可以更有效地吗??

附言:它将用PHP编码,页面将通过JS文件在外部页面上使用。

在引号表中添加一列,并将其称为view_counter。这将包含每个报价显示给用户的次数。

本例假定表结构如下:

quotes(id, quote, view_counter)

以下是查询:

select id, quote
from quotes
order by view_counter asc
limit 1

很简单,对吧?现在,在呈现页面之前,运行以下查询:

update quotes set view_counter = 1+ view_counter where id = :quote_id

其中:quote_id是您下载的查询id的值。

两个查询!还不错。但是,如果我们有一个种族条件,并且碰巧两个不同的用户同时请求查询,该怎么办?你有两个选择:

  1. 不要在意(我支持这一点),因为如果世界的另一端有人读过和他一样的话,没有人会流汗
  2. 锁定表格。如果你想使用这个路由,在我说的2之前运行这个查询:LOCK TABLES quote WRITE,这个作为最后一个查询UNLOCK TABLES

我投票支持备选方案1。

如果您使用唯一ID存储报价,您可以执行类似的操作

下一个报价:

SELECT * FROM `quotes` WHERE `id` > $currentID ORDER BY `id` ASC LIMIT 1 ;

对于以前的报价

SELECT * FROM `quotes` WHERE `id` < $currentID ORDER BY `id` DESC LIMIT 1 ;

基本上,您将在数据库中查找下一个和上一个ID。并将其与你现在正在播放的节目进行比较。这将显示您想要的报价