我需要能够在每个页面加载时从数据库中显示下一个引用。我怎么能做到这一点?
我能想到的唯一解决方案是:
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文件在外部页面上使用。
答案 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的值。
两个查询!不错。但是,如果我们有竞争条件,并且偶然两个不同的用户同时请求查询,该怎么办?你有两个选择:
LOCK TABLES quote WRITE
之前运行此查询,并将此查询作为最后一次查询UNLOCK TABLES
我投票支持选项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。并将它与你现在的那个相比较。这将显示您想要的报价