Archief - MYSQL: Rijen verwisselen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Avalanched

Legacy Member
Ik moet een menukaart maken waarbij men nog verschillende onderverdelingen in heeft bv wok, salades. nu heeft men gevraagt om deze onderverdelingen te kunnen schikken zoals zij dat willen

nu probeer ik een systeem te maken waarbij men via het admin menu de categorien telkens een plaats naar boven of beneden kunnen zetten.

ik heb dit geprobeert telkens het ID te veranderen ( want een zeer raar gedoe is wat ik doe en waarschijnlijk helemaal verkeerd )

ik moet eerst de 2 rij id's optellen met 100 zodat ik ze daarna de id's terug kan zetten ik doet dit zo:

PHP:
$l1_id = @$_GET['id']; // ID van de rij dat naar boven geplaatst moet worden
$l2_id = @$_GET['id']-1; // ID van de rij die vervangen word
/* dan maak ik 2 temp id's omdat als ik ze direct met elkaar wil veranderen, lukt het niet omdat PRIMARY key opstaat */
$t1_id = $count+100; 
$t2_id = $count+101;
// en dan uitvoeren op de database
$update_1 = "UPDATE $table SET id='$t1_id' WHERE id='$l1_id'";
$update_2 = "UPDATE $table SET id='$t2_id' WHERE id='$l2_id'";
$update_3 = "UPDATE $table SET id='$l2_id' WHERE id='$t1_id'";
$update_4 = "UPDATE $table SET id='$l1_id' WHERE id='$t2_id'";
mysql_query($update_1) or die("Er is een fout opgetreden: ".mysql_error());
mysql_query($update_2) or die("Er is een fout opgetreden: ".mysql_error());
mysql_query($update_3) or die("Er is een fout opgetreden: ".mysql_error());
mysql_query($update_4) or die("Er is een fout opgetreden: ".mysql_error());

Ik denk niet dat dit een goede manier is maar ik zou niet weten hoe ik het anders zou moeten doen. ook een bijkomend probleem is .. als ik nu rijen ga verwijderen en dan toevoegen is heel dat ID auto_increment in de war.
terwijl ik gewoon 2 rijen wil omwisselen dat als ik het parse in een goeie volgorde getoont wordt. iemand een idee hoe ik dit makkelijker of beter oplos ??

Skarr

Legacy Member
waarom voegt ge geen extra veld bij ?

sorteer char(2)

en ge verandert dat veld
en in uwe select zet ge dan bij

ORDER BY sorteer

Obliv`

Legacy Member
Skarr zei:
waarom voegt ge geen extra veld bij ?

sorteer char(2)

en ge verandert dat veld
en in uwe select zet ge dan bij

ORDER BY sorteer

volgens mij doet hij het op een goede manier, er moeten toch sowieso 2 id's veranderd worden
anders hebben ze allebij dezelfde waarde

xml

Legacy Member
Ja, maar bij zijn oplossing heb je 4 queries, en anders maar 2. ;)

killgore

Legacy Member
http://www.sitepoint.com/article/hierarchical-data-database

perfect systeem, ik heb het enkel uitgebreid en elke element ook een parentid gegeven voor snellere verwerking (> iets grotere db imho). ook vreselijk handig wat betreft ordening e.d.

Ik ben aan algemene klasse bezig hiervoor die alle algoritmes bevat, maar dit geef ik atm nog niet public, srry ;).

edit: dunno of dit overpower is voor je systeem, weet ook niet hoe alles ineenzit daar jemaar vrij beperkte data geeft ;)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan