【问题标题】:PHP/MySQL How can I re-use ID's for blog articles instead of +1 each timePHP/MySQL 我怎样才能将 ID 用于博客文章而不是每次都 +1
【发布时间】:2013-06-27 15:49:38
【问题描述】:

我最近使用 PHP 和 MySQL 从头开发了一个 CMS,通过 Apache/phpmyadmin 在 localhost 上运行。

到目前为止一切都很顺利,访问者可以查看文章并成功浏览页面。管理员(由管理员在 CMS 或 MySQL 架构中创建)可以登录、查看文章、编辑文章、查看和编辑用户以及删除文章。

我的问题是,当文章被删除时,(任何现有文章的)底部的下一个/上一个按钮具有以下功能

<?php if ($id != 1) : ?>

<a href="article.php?id=<?php echo $id - 1; ?>">Previous Article</a>

&nbsp; &nbsp;

<?php endif; ?>

它会查找以前存在的带有 x-id 的文章,但是由于该文章已被删除,因此它不再存在。有什么方法可以在文章被删除时删除文章 ID,从而再次释放该文章 ID?

我可以在 phpmyadmin 的架构中手动将 id 重置为 0,1,2,3... 等,但我想应用一些逻辑以使该系统完美运行。

非常感谢您的帮助,如果有时间,我会将 CMS 上传到我的网络服务器,以便免费查看。

~迈尔斯

编辑:可以在这里观看视频:http://youtu.be/F8LU1jei3E4

【问题讨论】:

  • 对于您的分页,您需要允许缺少 id,使用 sql 中的 count 和 limit 命令很容易做到,因为它们是 id 独立的,即:count 3 可以是任何 id。只需在 php 分页上谷歌一下,您应该能够通过一些小的修改来复制和粘贴。
  • 你不能像其他人一样从数据库中检索下一个/上一个 ID 而不是计算它们吗?假设您有 500 篇文章,而最新的一篇文章排在第 20 位,这是没有意义的。
  • 所以理论上我可以使用 MAX ID 作为下一个按钮?
  • max id 会将您返回到最新的文章,但如果您在第 3 页上的每页有 10 篇文章,您可以选择限制 (3x30,4x10) 等来拉回接下来的 10 篇文章 id为您的第 4 页等等

标签: php mysql


【解决方案1】:

您可以通过基于id 的查询来做到这一点。

上一篇文章:

SELECT * FROM articles WHERE id < ? ORDER BY id DESC LIMIT 1

下一篇:

SELECT * FROM articles WHERE id > ? ORDER BY id LIMIT 1

【讨论】:

  • 谢谢 tadman,理论上这对我来说是最有意义的,我本质上是用 "$id
  • $id &lt; $id 没有意义。它应该是id &lt; ?,其中? 是相关$id 的转义值。如果您是using PDO,这就是您编写语句的方式。尝试id=&lt;?php echo $id ?&gt;&amp;dir=next 作为您的“下一个”链接,同样的想法用于prev,并使用$_GET['dir'] 的值来确定要使用哪个查询。
  • 完美。非常感谢!
【解决方案2】:

因此,对于您的分页,最好使用 SQL 的 LIMIT。 而不是使用您的 id 进行这样的查询:

'SELECT * FROM articles WHERE article_id=' . $id

(这不是一个安全的查询,只是给你看)

因此,您的查询应该如下所示:

'SELECT * FROM articles LIMIT ' . $id . ', 1;'

这不会返回 ID 为 $id 的文章,而是返回第 $id 篇文章。 希望你清楚。

【讨论】:

  • 在 MySQL 中使用偏移量对于大偏移量来说真的很慢。
  • 除非你使用延迟行查找和 InnoDB。此外,拥有 100 万条记录并使用常规方法仍然很快,一个简单的博客将有 100 万篇文章是值得怀疑的。
猜你喜欢
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
  • 2011-11-13
  • 1970-01-01
相关资源
最近更新 更多