使用PHP更改数据库记录排序顺序,以便在其他记录之间移动记录位置
我有一个项目管理PHP/MySQL/JavaScript应用程序,它有项目任务列表,有任务记录 Tak列表名称/标题只不过是一个任务记录,其数据库列指示它将用作标题/列表名称,然后任务记录可以根据排序顺序数据库列组织在单独的任务列表下 因此,根据下面的演示,该演示由17条任务记录组成,3条是任务列表记录使用PHP更改数据库记录排序顺序,以便在其他记录之间移动记录位置,php,mysql,sorting,Php,Mysql,Sorting,我有一个项目管理PHP/MySQL/JavaScript应用程序,它有项目任务列表,有任务记录 Tak列表名称/标题只不过是一个任务记录,其数据库列指示它将用作标题/列表名称,然后任务记录可以根据排序顺序数据库列组织在单独的任务列表下 因此,根据下面的演示,该演示由17条任务记录组成,3条是任务列表记录 ID | TASK NAME | Sort Order 01 | - Task list 1 | 1 02 | --- task item 1 | 2 0
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
< P> >考虑我想更新<代码>任务项13 <代码> > <代码> ID=16 < /COD>和<代码>排序16 < /C> >并更新其排序顺序,使其“移动”任务记录到<代码>任务列表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);
如果您能提供任何帮助,我将不胜感激,因为我不知道该怎么做?
经过一番思考,我认为这里可能涉及到
完成将任务记录移动到新列表的可能步骤
任务项13的排序顺序必须更改为的数字,以便将其移动到列表1
任务项13
和任务列表2记录
的排序顺序都是7
有没有关于如何做到这一点的建议,我上面的步骤听起来是否正确?我再次意识到这不是最好的结构,但我正在尝试使它在现有系统上工作我想这会工作,但我想我应该为“排序顺序”添加一列,而不是混淆id:o,并假设您使用PDO作为$this->db-我想诀窍是给newid的当前所有者一个临时id,然后将旧ID移动到新ID,然后将临时ID移动到旧ID
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)
}
我想这是可行的,但我想我应该为“排序顺序”添加一个列,而不是与IDs: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)
}
看看其他人是如何使用mysqlam管理拖放排序表的,我错了,还是您这里有一个表可供儿童多用?好的,不要做这个重新整理排序列的事情。有人会用它来解决更大的问题,成为foobar'd@DrewPierce你说的没错,这不是理想的最好的解决方案,但在这个现有的项目中,我试图不改变它,暂时生活下去。他们使用1个表格来记录任务记录和任务列表/标题记录。所有记录都有一个
sort\u order
DB列,其中任务列表标题只需拖放到任务记录之间,即可将它们分开并显示在列表中。我意识到正确的方法是创建一个新的TaskLists DB表,但目前我对这样做很感兴趣being@Strawberry拖放排序表已经可以正常工作了。我试图在代码中找到一种方法,在其他项目之间移动和重新定位项目,所有这些都是用代码实现的。u将在“任务项13”所在的位置有一个洞。也许你想更进一步了解其他人是如何使用mysqlam管理拖放排序表的我弄错了,或者你这里有一张可以与孩子们一起使用的表吗?好的,不要做这个重新整理排序列的事情。有人会用它来解决更大的问题,成为foobar'd@DrewPierce你说的没错,这不是理想的最好的解决方案,但在这个现有的项目中,我试图不改变它,暂时生活下去。他们使用1个表格来记录任务记录和任务列表/标题记录。所有记录都有一个sort\u order
DB列,其中任务列表标题只需拖放到任务记录之间,即可将它们分开并显示在列表中。我意识到正确的方法是创建一个新的TaskLists DB表,但目前我对这样做很感兴趣being@Strawberry拖放排序表已经可以正常工作了。我试图在代码中找到一种方法,在其他项目之间移动和重新定位项目,所有这些都是用代码实现的。u将在“任务项13”所在的位置有一个洞。也许你想更进一步了解其他人是如何使用mysqlam管理拖放排序表的我弄错了,或者你这里有一张可以与孩子们一起使用的表吗?好的,不要做这个重新整理排序列的事情。有人会用它来解决更大的问题,成为foobar'd@DrewPierce你说的没错,这不是理想的最好的解决方案,但在这个现有的项目中,我试图不改变它,暂时生活下去。他们使用1个表格来记录任务记录和任务列表/标题记录。所有记录都有一个sort\u order
DB列,其中任务列表标题只需拖放到任务记录之间,即可将它们分开并显示在列表中。我意识到正确的方法是创建一个新的TaskLists DB表,但目前我对这样做很感兴趣being@Strawberry拖放排序表已经可以正常工作了。我试图在代码中找到一种方法,在其他项目之间移动和重新定位项目,所有这些都是用代码实现的。u将在“任务项13”所在的位置有一个洞。我想把它收紧