我有一个项目管理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 = 16
和sort 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);
我将感谢任何帮助,请,因为我不知道如何做到这一点?
经过一番思考,这是我认为可能涉及的…
完成将任务记录移动到新列表的可能步骤
- 将
task item 13
从列表3移动到列表1。查询DB并获取我们要移动到的下一个列表后的排序顺序值。因此,获取列表2的排序顺序,即7。 - 现在从列表2的排序顺序中减去-1,得到
task item 13
的排序顺序必须改变的数字,以便将其移动到list 1
- 现在
task item 13
和Task list 2 record
的排序顺序都是7
。 - 所以从
Task list 2
记录和之后的所有记录开始,需要将排序顺序数增加+1
我想这会起作用,但我想我会添加一列"排序顺序",而不是与id混淆:0,假设你使用PDO作为$this->db -我认为诀窍是给当前的newid所有者一个临时id,然后将oldid移动到newid,然后将temp移动到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)
}