php - 表条目顺序

标签 php sql mysql

好吧,我知道这听起来像是一个蹩脚的问题。这可能是最明显的事情之一,但我一直在努力想出一种对数据库中的条目进行排序的好方法。

像这样的图像表:

entry_id   |   entry_data
-------------------------
1          | data1
2          | data2
...        | ...
n          | datan

entry_id 当然是带有 AI 选项的主键,因此所有条目都有一个唯一的 ID。 现在。我想订购该数据。假设我希望 entry_id = 2 在不更改其 entry_id 的情况下成为第一个。然后该表需要另一列来存储订单号。 我尝试了 2 种方法。

  1. entry_order_no:这将基本上保留项目的订单号。任何新项目都将始终添加到末尾。

  2. left_id + right_id:phpBB 使用这种方法。不确定为什么它需要 right_id?

我似乎更喜欢第一种方法,但是你稍后如何对数据进行排序。 假设我想将新添加的项目从最后一个位置移动到第二个。 我一直这样做的方式是使用索引表,其中索引是订单号。每个索引都包含具有 entry_id 的关联数组。这样我就“简单地”做了 foreach 循环,并对从第二位开始的所有条目进行了更新。这可能适用于几行。甚至可能是几十个。但是当你有数百个时怎么办?这看起来效率很低。第二个似乎好一点。但仍有一些事情告诉我还有更好的方法。

请提出建议。

最佳答案

我不确定您尝试这样做的真正原因,所以很难说,但就您低效的 foreach 循环而言,停止对集合使用迭代方法 - 使用集合操作,它们速度更快,而且正是数据库的用途。所以而不是...

for row in db>2
    entryorderno += 1

这样做...

UPDATE Table
SET entryorderno = entryorderno + 1
WHERE entryorderno > 2

此外,根据 Alex Martelli 所说,这样做暂时应该没问题,但最终你将不得不用新的间距重新堆叠所有内容......但是该字段上的聚集索引将使事情按顺序排列那个 ID....当然,如果它是一个大表,它也意味着插入到表的中间可能是资源密集型的。

关于php - 表条目顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/959819/

相关文章:

javascript - Bootstrap 模态不加载图像

php - 我的 SQL 语法错误

.net - 无需使用多个 IFS 即可搜索我的网站

sql - SQL*Plus 是否有 less 的等价物?

sql - 如何从返回随机行的选择中获取剩余数据

php - 如何通过连接列在 MYSQL 中通过与另一个表的关系来过滤表?

php - Laravel 与 Angularjs 验证 json 请求错误响应

php - 如何将数据从主键列插入到外键

mysql - 在 magento 中大量更新价格

php - 在 php 中选择另一个网站的值时如何填充下拉框的值