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

PHP-在每个页面加载上显示数据库中的下一行,php,sql,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 certa

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

我能想到的唯一解决办法是:

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文件在外部页面上使用。

如果您使用唯一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 ;
SELECT*FROM`quotes`WHERE`id`<$currentID ORDER BY`id`DESC LIMIT 1;

基本上,您将在数据库中查找下一个和上一个ID。然后把它和你现在正在演的那个比较。这将显示所需的报价

在报价表中添加一列,并将其称为
查看\u计数器
。这将包含每个报价向用户显示的次数

此示例假定表结构如下所示:

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的值

两个问题!不错。但是如果我们有一个竞争条件,碰巧两个不同的用户同时请求一个查询怎么办?你有两个选择:

  • 不要在意(我赞同),因为如果世界的另一边有人读过和他一样的名言,没有人会汗流浃背
  • 锁桌子。如果要使用此路由,请在我说的2个查询之前运行此查询:
    LOCK TABLES quote WRITE
    ,并将此查询作为最后一个查询
    UNLOCK TABLES

  • 我投票支持选项1。

    使用session存储页面加载计数,并依赖该调用sql显示新报价。希望会work@demochanico你试过我的答案了吗?你应该添加一个
    ORDER BY id ASC
    (或
    DESC
    用于上一个)。下一个引号需要在页面加载时加载(随机用户加载页面并从列表中获取下一个引号)。因此,我没有当前ID,因此无法获取下一个ID。因此,每次加载页面时,是否显示下一个引号?在这种情况下,使用id为1的$_SESSION和slow2 increment thru(将$currentID替换为SESSION)@user2035819,用户没有“当前id”,而且可能有不同的用户,因此无法使用SESSION。SESSION的用法听起来不错,但SESSION是为每个用户存储的,还是全局的?这是一个不错的解决方案!是的,选择1就行了。谢谢