好吧,我知道这听起来像是一个蹩脚的问题。这可能是最明显的事情之一,但我一直在努力想出一种对数据库中的条目进行排序的好方法。
像这样的图像表:
entry_id | entry_data
-------------------------
1 | data1
2 | data2
... | ...
n | datan
entry_id 当然是带有 AI 选项的主键,因此所有条目都有一个唯一的 ID。 现在。我想订购该数据。假设我希望 entry_id = 2 在不更改其 entry_id 的情况下成为第一个。然后该表需要另一列来存储订单号。 我尝试了 2 种方法。
entry_order_no:这将基本上保留项目的订单号。任何新项目都将始终添加到末尾。
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/