每页随机ID

问题描述 投票:0回答:1

我想创建一个按钮,从数据库中为每个链接提供唯一的链接ID。

我只有 "下一个 "按钮,它应该给我下一个故事页面。

我没有从google上找到任何关于如何创建具有ID的链接的片段,以便以后不会重复。

我的代码。

$row = Db::run()->pdoQuery('SELECT c.name AS name
, p.id AS id, p.created AS created
, p.title AS title, p.body AS body, p.cover AS cover 
FROM projects AS p 
INNER JOIN categories AS c 
  ON p.category = c.id 
WHERE p.id ="' . $id . '";')->results(); // for current story article

$nrow = Db::run()->pdoQuery('SELECT 
    (SELECT MIN(id) AS id FROM projects WHERE id > p.id) as next_id, 
    (SELECT title FROM projects WHERE id > p.id) as next_title,
    (SELECT cover FROM projects WHERE id > p.id) as next_cover,
    (SELECT c.name AS name FROM projects AS a 
        INNER JOIN categories AS c 
          ON a.category = c.id 
     WHERE a.id > p.id) AS next_name
FROM projects p WHERE p.id = "' . $id . '"')->results(); // for next story article


$tpl->data = $row;
$tpl->next = $nrow;

"下一个故事 "按钮图像:下一个故事

也许可以通过某种方式检查上次给出的ID是什么,当前的ID是什么,下一次的ID是什么,或者缓存它?

php pdo
1个回答
0
投票

它看起来像你使用MySQL查询在你的问题。

你可以更新你的数据库模式,使你的...。projects 表中有一列带有 AUTO_INCREMENT 旗帜。

其文件:

"AUTO_INCREMENT属性可用于为新行生成唯一标识"

然后,当保存一条新的记录到该表时,你可以省略下面的 id 列或指定 NULL如果模式说 NOT NULL 来进行自动增量。这将防止身份碰撞,但它们不是随机的。

为此,你可以考虑使用 UUID()UUID_SHORT() 在MySQL 5.7+中.

此外,虽然你的问题暗示你没有使用ORM,但像你这样的工具,如 理论 & 教义扩展 给予快速访问更多随机的,(和更有利于SEO的)独特的ID选项的行,如 蛞蝓.


0
投票

这不是你要找的答案--但如果你想要一个具体的答案,你需要更具体。

从数据库中给每个链接一个唯一的链接ID

这是不可能的,除非你的数据库中的故事比任何时候都要多--这就有点傻了。如果你的意思是一个人不会看到同一个ID超过一次,那就比较合理了。但你的意思是一个会话中的一次吗?只要他们有一个账户,就会有一次吗?你是想提供一个匿名的功能,让人们在没有账户的情况下也能使用吗?

你没有说ID呈现的顺序是相关的。

你没有说'projects.id'的数据类型是什么。

你对下一个故事的查询完全没有意义。

假设故事将按顺序读取,你不保留服务器端的状态,你已经确保符合当地的provacy法律,而且project.id是一个近乎连续的整数集,而且这是一个基于Web的应用程序(很多假设),那么只要在每次呈现一个故事时丢弃一个包含ID的cookie,然后得到下一个故事......

 SELECT c.name AS name
 , p.id AS id, p.created AS created
 , p.title AS title, p.body AS body, p.cover AS cover 
 FROM projects AS p 
 INNER JOIN categories AS c 
   ON p.category = c.id 
 WHERE p.id =(SELECT MIN(read.id) 
    FROM projects read
    WHERE id>" . (integer) $_COOKIE['lastread'] 
© www.soinside.com 2019 - 2024. All rights reserved.