使用php对父/子行mysql重新排序
对于嵌套页面布局,我需要在具有以下结构的表中通过表单提交行重新排序 列:(表名为:sourcedocs3)使用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代码,因此我的结论如下:
我需要能够在不丢失基本结构的情况下(通过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."'";
}
?>