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的值
两个问题!不错。但是如果我们有一个竞争条件,碰巧两个不同的用户同时请求一个查询怎么办?你有两个选择:
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就行了。谢谢