gpt4 book ai didi

php - 如何对学说中的列重新编号

转载 作者:行者123 更新时间:2023-11-29 22:40:54 25 4
gpt4 key购买 nike

我正在使用原则在 zf2 中开发一个项目,我需要创建一个方法来重新编号 order 字段,以便值是连续的。之前:

+-----+-------+--------+------------+
| id | order | item | collection |
+-----+-------+--------+------------+
| 987 | 1 | apple | fruits |
| 46 | 2 | banana | fruits |
| 394 | 7 | grape | fruits |
| 265 | 30 | pear | fruits |
| 89 | 1 | squash | vegetables |
+-----+-------+--------+------------+

之后:

+-----+-------+--------+------------+
| id | order | item | collection |
+-----+-------+--------+------------+
| 987 | 1 | apple | fruits |
| 46 | 2 | banana | fruits |
| 394 | 3 | grape | fruits |
| 265 | 4 | pear | fruits |
| 89 | 1 | squash | vegetables |
+-----+-------+--------+------------+

顺序是按集合排序的,但我不需要对整个数据集重新编号的方法;只是特定集合中的记录。

我正在考虑的一些解决方案包括:

临时表:

  1. 将相关记录按顺序转储到新表中,
  2. 添加一个名为 new_order 的字段,该字段是一个自动编号字段,
  3. 连接 id 字段上的表并更新 current_table.order =
    new_table.new_order
    ,
  4. 删除临时表。

循环记录并一次更新一个:

$collection = … // results from select query where collection=fruits

n = 1;
For each ($collection as $item) {
// update query to set order=n where id=$item[id]
n += 1
}

还有其他想法吗?

最佳答案

非常,绝对,请使用第二种方法......即循环记录并更新。

不使用临时表的简单原因:

  • 如果您使用 MySQL 临时表,则它对当前 session 可见;如果您使用持久连接,它实际上可以由多个 session 共享。如果同时运行该脚本两次,可能会导致一些数据损坏。同样的事情也适用于创建真实的表。

你应该做的是:

  1. 检索所有数据,或者至少按逻辑批处理检索它们(在这种情况下,可以通过仅检索特定“集合”(例如水果)的行来完成)
  2. 对行进行排序(这也可以之前在 SQL 查询中完成)
  3. 使用计数器更新行,就像您建议的那样

关于php - 如何对学说中的列重新编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29355394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com