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

时间:2013-07-25 05:45:25

标签: php sql

我需要能够在每个页面加载时从数据库中显示下一个引用。我怎么能做到这一点?

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

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查询以显示引用。任何方式更多有效

P.S。它将以PHP编码,页面可通过JS文件在外部页面上使用。

2 个答案:

答案 0 :(得分:1)

在引号表中添加一列,并将其命名为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. 锁定表格。如果您想使用此路线,请在我说的LOCK TABLES quote WRITE之前运行此查询,并将此查询作为最后一次查询UNLOCK TABLES
  3. 我投票支持选项1。

答案 1 :(得分:0)

如果您使用唯一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。并将它与你现在的那个相比较。这将显示您想要的报价