php - 更改数据库记录排序顺序以使用 PHP 在其他记录之间移动记录位置

标签 php mysql sorting

我有一个项目管理 PHP/MySQL/JavaScript 应用程序,它有项目任务列表,其中有任务记录

一个 Tak 列表名称/标题只不过是一个带有数据库列的任务记录,表明它被用作标题/列表名称,然后任务记录可以根据那里组织在单独的任务列表下 排序顺序数据库列

因此基于下面的演示,它包含17 条任务记录3 条任务列表记录

ID  | TASK NAME          | Sort Order
01  | - Task list 1      | 1
02  | --- task item 1    | 2
03  | --- task item 2    | 3
04  | --- task item 3    | 4
05  | --- task item 4    | 5
06  | --- task item 5    | 6
07  | - Task list 2      | 7
08  | --- task item 6    | 8
09  | --- task item 7    | 9
10  | --- task item 8    | 10
11  | --- task item 9    | 11
12  | --- task item 10   | 12
13  | - Task list 3      | 13
14  | --- task item 11   | 14
15  | --- task item 12   | 15
16  | --- task item 13   | 16
17  | --- task item 14   | 17
18  | --- task item 15   | 18

因此请考虑我要更新 task item 13 的场景,即 ID = 16sort order 16 并更新其排序顺序以便它将任务记录“移动”到 Task List 1

我想要一个简单易用的 PHP 函数来完成这种类型的工作,将任务记录移动到新的排序顺序,以便它显示在新的任务列表下,如下所示:

/**
 * Move Task record to new Task List by ID
 * $taskId int Task ID number
 * $taskListId int Task List record ID number
 */
$task->moveTaskIdToListId($taskId, $taskListId);

如果您能提供任何帮助,我将不胜感激,因为我不确定该怎么做?

经过一番思考,这里是我认为可能涉及的内容......

完成将任务记录移动到新列表的可能步骤

  1. 任务项 13 从列表 3 移动到列表 1。查询数据库并获取我们要移动到的列表之后的下一个列表的排序顺序值。因此,获取列表 2 的排序顺序,即 7。
  2. 现在从列表 2 的排序顺序中减去 -1,这会为我们提供 task item 13 的排序顺序必须更改为的编号,以便将其移动到 list 1
  3. 现在 task item 13Task list 2 record 的排序顺序都是 7
  4. 因此,从任务列表 2 记录及其后的所有记录开始,需要将排序顺序编号增加 +1

关于如何执行此操作的任何建议,我的上述步骤是否适合执行此操作? AGain 我意识到这不是执行此操作的最佳结构,但我正在努力使其在现有系统上运行

最佳答案

我想这行得通,但我想我会为“排序顺序”添加一列,而不是弄乱 ID :o 并假设您将 PDO 用作 $this->db - 我认为诀窍是给newid的当前所有者一个临时id,然后将oldid移动到newid,然后将tempid移动到oldid

public function moveTaskIdToListId($oldid,$newid){

$this->db->beginTransaction();
$tmpid=$this->db->query('SELECT max(`id`) FROM `table`');
++$tmpid;
$this->db->query('UPDATE `table` SET `id` = '.$this->db->quote($tmpid).' WHERE `id` = '.$this->db->quote($newid));
$this->db->query('UPDATE `table` SET `id` = '.$this->db->quote($newid).' WHERE `id` = '.$this->db->quote($oldid));
$this->db->query('UPDATE `table` SET `id` = '.$this->db->quote($oldid).' WHERE `id` = '.$this->db->quote($tmpid));
$this->db->commit();
//todo: error handling and handle case when newid does not exist yet..(if that ever happens)
}

关于php - 更改数据库记录排序顺序以使用 PHP 在其他记录之间移动记录位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30631862/

相关文章:

c++ - 如何使用迭代器格式实现快速排序?

从 Javascript 字符串调用时 PHP 逻辑不运行

php - 按值搜索时返回数组的索引

php - 是否可以直接从 php 更改 php 源代码?

python - 通过python连接时如何更改默认的Mysql连接超时?

mysql - 无法登录到 phpMyAdmin,没有显示错误

javascript - 如何保持 Javascript 数组排序,而不对其进行排序

javascript - 当两行与另一列的总和相同时返回数组中的单行

php - php文件函数列表

mysql - 如何获取某一列中具有最大值的行