Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php对父/子行mysql重新排序_Php_Mysql_Nested - Fatal编程技术网

使用php对父/子行mysql重新排序

使用php对父/子行mysql重新排序,php,mysql,nested,Php,Mysql,Nested,对于嵌套页面布局,我需要在具有以下结构的表中通过表单提交行重新排序 列:(表名为:sourcedocs3) 我需要能够在不丢失基本结构的情况下(通过PHP/Mysql)将3重新排序为1——3变为1,所有值为1的行都递增)。听起来很简单,但我在洗牌后很难保持结构完整(3 | 1应该是1 | 1,3 | 2应该是1 | 2等) 请注意,如果您要将菜单移动到更晚的位置,例如从2移动到4,您可能希望按升序进行第二次更新。Bill的回答是即时的,但没有包含执行该操作所需的PHP代码,因此我的结论如下:

对于嵌套页面布局,我需要在具有以下结构的表中通过表单提交行重新排序

列:(表名为:sourcedocs3)


我需要能够在不丢失基本结构的情况下(通过PHP/Mysql)将3重新排序为1——3变为1,所有值为1的行都递增)。听起来很简单,但我在洗牌后很难保持结构完整(3 | 1应该是1 | 1,3 | 2应该是1 | 2等)


请注意,如果您要将菜单移动到更晚的位置,例如从2移动到4,您可能希望按升序进行第二次更新。

Bill的回答是即时的,但没有包含执行该操作所需的PHP代码,因此我的结论如下:

    <?php
//if new sort number is less than old sortnum
    if ($newsortnum < $oldsortnum){
         //RUN SEPARATE QUERIES
         $sql_rename="UPDATE  `sourcedocs` SET sort1 = '999' WHERE sort1 =".$oldsortnum." AND category =  '".$category."'";
         $sql_reorder="UPDATE  `sourcedocs` SET sort1 = sort1 +1 WHERE sort1 >= ".$newsortnum." AND sort1 <= ".$oldsortnum." AND category =  '".$category."'";
         $sql_insert="UPDATE  `sourcedocs` SET sort1 =".$newsortnum." WHERE sort1 = '999' AND category =  '".$category."'";
    }
    //if new sort number is greater than old sortnum decrement all sortnums greater than new sortnum and decrement sortnums between 
    if ($newsortnum > $oldsortnum){
    //RUN SEPARATE QUERIES
         $sql_rename="UPDATE  `sourcedocs` SET sort1 = '999' WHERE sort1 =".$oldsortnum." AND category =  '".$category."'";
         $sql_reorder="UPDATE  `sourcedocs` SET sort1 = sort1 -1 WHERE sort1 <= ".$newsortnum." AND sort1 >= ".$oldsortnum." AND category =  '".$category."'";
         $sql_insert="UPDATE  `sourcedocs` SET sort1 =".$newsortnum." WHERE sort1 = '999' AND category =  '".$category."'";
    }
    ?>

您能给出预期的输出结果吗?不确定除了我在第2段中概述的输出之外您还需要什么…所有3*的sort1值都应该是1 | 1,1 | 2等,所有sort1值大于1的行都应该递增。抱歉,如果这仍然是模糊的。“为什么人们从不给桌子起名字”-好笑:)会查出来。谢谢你的及时回答。比尔的“大人物”很有魅力。再次感谢你的指导。很高兴能帮上忙。感谢您以我所希望的轻松心情对我的餐桌名称进行评论。:-)顺便说一句,传统的堆栈溢出是对有用的答案进行投票,或者选择您认为最有帮助的答案作为“接受答案”。干杯-我选择了您的答案作为“接受”…我是堆栈新手,所以在我的分数从6到15之前不能“投票”。再次感谢-在回答时始终欣赏幽默:)
1 | 1 | parent

1 | 2 | child

2 | 1 | no nesting

3 | 1 | parent

3 | 2 | child

3 | 3 | child

4 | 1 | no nesting
START TRANSACTION;

UPDATE `why_do_people_never_give_the_table_name` SET sort1 = 999 
WHERE sort1 = 3;

UPDATE `why_do_people_never_give_the_table_name` SET sort1 = sort1 + 1 
WHERE sort1 BETWEEN 1 AND 3
ORDER BY sort1 DESC;

UPDATE `why_do_people_never_give_the_table_name` SET sort1 = 1 
WHERE sort1 = 999;

COMMIT;
    <?php
//if new sort number is less than old sortnum
    if ($newsortnum < $oldsortnum){
         //RUN SEPARATE QUERIES
         $sql_rename="UPDATE  `sourcedocs` SET sort1 = '999' WHERE sort1 =".$oldsortnum." AND category =  '".$category."'";
         $sql_reorder="UPDATE  `sourcedocs` SET sort1 = sort1 +1 WHERE sort1 >= ".$newsortnum." AND sort1 <= ".$oldsortnum." AND category =  '".$category."'";
         $sql_insert="UPDATE  `sourcedocs` SET sort1 =".$newsortnum." WHERE sort1 = '999' AND category =  '".$category."'";
    }
    //if new sort number is greater than old sortnum decrement all sortnums greater than new sortnum and decrement sortnums between 
    if ($newsortnum > $oldsortnum){
    //RUN SEPARATE QUERIES
         $sql_rename="UPDATE  `sourcedocs` SET sort1 = '999' WHERE sort1 =".$oldsortnum." AND category =  '".$category."'";
         $sql_reorder="UPDATE  `sourcedocs` SET sort1 = sort1 -1 WHERE sort1 <= ".$newsortnum." AND sort1 >= ".$oldsortnum." AND category =  '".$category."'";
         $sql_insert="UPDATE  `sourcedocs` SET sort1 =".$newsortnum." WHERE sort1 = '999' AND category =  '".$category."'";
    }
    ?>