login  Naam:   Wachtwoord: 
Registreer je!
 Forum

SQL Update Statement

Offline JelmerVisser - 31/08/2011 11:11 (laatste wijziging 02/09/2011 12:28)
Avatar van JelmerVisserLid Hallo allemaal,

Een weekje terug had ik jullie de vraag gesteld hoe ik makkelijk mijn menu kon opslaan in de database etc.
Dit menu moest zeg maar sleepbaar zijn, dit heb ik met jQuery nestedSortable gedaan.
Als je wilt opslaan genereert het script een Serialize output zoals dit:

  1. list[1]=root&list[10]=root&list[11]=10&list[14]=11&list[13]=11&list[15]=11&list[16]=10&list[23]=16&list[24]=16&list[19]=16&list[25]=16&list[26]=16&list[29]=10&list[32]=29&list[31]=29&list[30]=29&list[33]=29&list[35]=29&list[34]=10&list[49]=root&list[50]=root&list[51]=root&list[52]=root&list[53]=root&list[56]=53&list[57]=53&list[58]=53&list[59]=53&list[54]=root&list[60]=54&list[55]=root


Hoe sla ik dit het beste op in mijn database? Ik heb gezien dat het met json_decode vaak gedaan wordt, en ik heb daar uiteraard al het één en ander mee geprobeerd, maar ik kom er niet goed uit.

Eventueel kan het menu uiteraard ook nog naar hierarchy of array worden omgezet natuurlijk als dat makkelijker is.

Alvast bedankt.

Jelmer.

5 antwoorden

Gesponsorde links
Offline larssy1 - 31/08/2011 11:49
Avatar van larssy1 MySQL beginner waarom niet gewoon je database zo opbouwen dat je gewoon een tabel hebt voor menu waarin de regels: Id, Naam, SorteerPlek

1. Menu omzetten naar array
2. oude data van de database tabel kopieren naar een menubackup database tabel
3. met een lus de array regels uitlezen en met een query de database tabel updaten
4. als alles goed is gegaan, ben je klaar,, zo niet, dan kopier je de oude data dat nu in de backup tabel staat, terug naar het menu tabelletje in je database.

bij het maken van je website, gebruik je dus gewoon een lus dat data uitleest gesorteerd op SorteerPlek, daarnaast zit je hierdoor niet vast een specifieke menu namen.
Offline JelmerVisser - 01/09/2011 10:05 (laatste wijziging 01/09/2011 10:06)
Avatar van JelmerVisser Lid
larssy1 schreef:
waarom niet gewoon je database zo opbouwen dat je gewoon een tabel hebt voor menu waarin de regels: Id, Naam, SorteerPlek

1. Menu omzetten naar array
2. oude data van de database tabel kopieren naar een menubackup database tabel
3. met een lus de array regels uitlezen en met een query de database tabel updaten
4. als alles goed is gegaan, ben je klaar,, zo niet, dan kopier je de oude data dat nu in de backup tabel staat, terug naar het menu tabelletje in je database.

bij het maken van je website, gebruik je dus gewoon een lus dat data uitleest gesorteerd op SorteerPlek, daarnaast zit je hierdoor niet vast een specifieke menu namen.


Ja oké, ik heb dus de array bijvoorbeeld:

  1. '0' ...
  2. 'ID' => "0"
  3. 'ParentID' => "0"
  4. 'Order' => "1"
  5. '1' ...
  6. 'ID' => "1"
  7. 'ParentID' => "0"
  8. 'Order' => "2"
  9. '2' ...
  10. 'ID' => "14"
  11. 'ParentID' => "11"
  12. 'Order' => "6"


En hoe zet ik dat dan het makkelijkste in de database per menu onderdeel?
Zoiets?:

  1. if (isset($_POST['submit'])){
  2. $savequery = "SELECT `ID`, `ParentID`, `Order`,`Title` FROM `pages` WHERE ID = '$rootid' ORDER BY `ParentID`, `Order`";
  3. $saveresult = mysql_query($savequery);
  4. while ($saverow = mysql_fetch_array($saveresult)){
  5. mysql_query('UPDATE pages SET ParentID='.$ParentID.', Order='.$Order.' WHERE ID="'.$ID.'";');}}


Jelmer.
Offline larssy1 - 01/09/2011 11:37
Avatar van larssy1 MySQL beginner heb al me al goed 1 tot 2jaar niet meer verdiept/gewerkt in PHP, dus zal eerst me kennis weer een beetje omhoog moeten halen..

Maar voor zover ik kan zien, doe jij het volgende:

- wachten tot 'submit event' word opgeroepen
- je haalt een record uit de database
Opmerking: je hebt '$rootid' in je code staan.. en geen '. $rootid .'
- je start een 'while' lus
- update elke record in je database

Als er ondertussen iets fout gaat, zit je dus met mogelijk meerdere items die op de zelfde 'order' staan, daarom suggereerde ik de regel die je wijzigt, daarvoor eerst naar de nieuwe tabel te schrijven.

Eventueel zou je ook gewoon een 'for' lus kunnen gebruiken aangezien je weet hoeveel items je hebt als je de inhoud van je array gaat tellen, wilt niet weglaten dat wat jij hebt gedaan waarschijnlijk beter is.
Offline Dlol - 01/09/2011 12:51
Avatar van Dlol Lid
Citaat:
Opmerking: je hebt '$rootid' in je code staan.. en geen '. $rootid .'


Maakt niet uit aangezien de string tussen " " staat. Als je de variabele toch buiten de quotes zou willen zetten moet het zo:

  1. "SELECT `ID`, `ParentID`, `Order`,`Title` FROM `pages` WHERE ID = '" . $rootid . "' ORDER BY `ParentID`, `Order`";
Offline larssy1 - 01/09/2011 14:52
Avatar van larssy1 MySQL beginner
Dlol schreef:
[..quote..]

Maakt niet uit aangezien de string tussen " " staat. Als je de variabele toch buiten de quotes zou willen zetten moet het zo:

[..code..]

ohja, foutje 
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.212s