Rangorde parent/child rijen mysql met behulp van php

Ik moet opnieuw ordenen via rijen voor het indienen van formulieren in een tabel met de volgende structuur voor een geneste pagina-indeling

Columns: (table name is: sourcedocs3)

sort1 | sort2 | type

1 | 1 | parent

1 | 2 | child

2 | 1 | no nesting

3 | 1 | parent

3 | 2 | child

3 | 3 | child

4 | 1 | no nesting

Ik moet kunnen herbestellen (via PHP/MySQL) van 3 naar 1 zonder de basisstructuur te verliezen - 3 wordt 1 en alle rijen met waarde 1 worden verhoogd). Klinkt eenvoudig, maar ik heb het moeilijk om de structuur intact te houden na schudden (3 | 1 zou 1 | 1 moeten zijn, 3 | 2 zou 1 | 2 moeten zijn enz.)

2
Kunt u het verwachte outputresultaat geven?
toegevoegd de auteur David Laberge, de bron
Niet zeker wat je nodig hebt, behalve de uitvoer die ik heb geschetst in de 2e alinea ... alle sort1 waarden van 3 * moeten 1 | 1, 1 | 2 etc zijn en alle rijen met sort1 waarde> 1 moeten worden verhoogd. Sorry als dit nog te vaag is.
toegevoegd de auteur timpng1, de bron

2 antwoord

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;

Merk op dat als u een menu naar een latere positie verplaatst, bijvoorbeeld verplaatsen van 2 naar 4, wilt u de tweede update in ASCENDEN volgorde bestellen.

3
toegevoegd
Blij om te helpen. Bedankt voor het nemen van mijn tabel-naamcommentaar in de luchtige geest die ik van plan was. :-) Trouwens, het is traditioneel op Stack Overflow om antwoorden te stemmen die nuttig waren, of kies als "geaccepteerd antwoord" degene die je de beste hulp vond.
toegevoegd de auteur Bill Karwin, de bron
"why_do_people_never_give_the_table_name" - funny :) Zal het bekijken. Bedankt voor het snelle antwoord.
toegevoegd de auteur timpng1, de bron
"Big up" naar Bill - werkte als een charme. Nogmaals bedankt voor de voogdij.
toegevoegd de auteur timpng1, de bron
Proost - ik heb je antwoord geselecteerd als "Geaccepteerd" ... ben nieuw bij Stack dus kan niet "stemmen" totdat mijn score van 6 naar 15 gaat. Nogmaals bedankt - waardeer altijd humor in een antwoord :)
toegevoegd de auteur timpng1, de bron

Het antwoord van Bill was precies goed - maar bevatte niet de PHP-code die nodig was om de operatie uit te voeren, dus hier is wat ik uiteindelijk heb gedaan:

    <?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."'";
    }
    ?>

Lang verhaal kort - Ik stopte met het maken van een PDO-instantie voor de beginTransactie (); ... een beetje rommeliger, maar het werkt. Ik kan overschakelen naar de PDO-methode maar moet verder gaan. Hier is een link naar de PDO-info als je soortgelijke problemen hebt:

PHP.net - PDO Construct
PHP.net - PDO beginTransaction();

0
toegevoegd