login  Naam:   Wachtwoord: 
Registreer je!
 Forum

een MySQL Record tussen 2 andere invoegen

Offline ivan_1987 - 10/01/2007 02:13
Avatar van ivan_1987Nieuw lid Hallo allemaal,
Ik heb al een tijdje een probleem met mysql en heb er geen antwoord op kunnen vinden op internet. Ik geloof ook niet dat het hier eerder is gevraagd.

Mijn probleem is als volgt:
Ik heb een mysql table met een aantal records daarin. Ik wil graag "door middel van een form of iets dergelijks" tussen twee bestaande records een record kunnen toevoegen.
Afgebeeld:

id | name | content
--------------------
0 | job | article
1 | robbin | article
2 | tamar | article

nou wil ik tussen record 1 en record 2 een record toevoegen ..

weet iemand hoe dat moet?

alvast bedankt mensen,

ivan

7 antwoorden

Gesponsorde links
Offline Kr4nKz1n - 10/01/2007 08:56
Avatar van Kr4nKz1n Onbekend Dit zou eventueel kunnen door het hoogste id te pakken (max). Dan een for-loop maken met het hoogste getal en steeds met 1 aftellen. Controleren of er een id bestaat met dat nummer, ja? Dan bewerk je hem, id=id+'1'.
Offline marten - 10/01/2007 10:47
Avatar van marten Beheerder Merk wel op dat het voor MySQL geen ene donder uitmaakt waar iets staat 
Offline Kr4nKz1n - 10/01/2007 11:00
Avatar van Kr4nKz1n Onbekend Ik denk dat hij de ID`s netjes op een rijtje wilt hebben staan daarom 
Offline ivan_1987 - 11/01/2007 13:40
Avatar van ivan_1987 Nieuw lid Hallo,
bedankt voor jullie reacties..
Kr4nKz1n je hebt gelijk, ik wil de id's wel netjes in een rijtje hebben maar ik snap niet helemaal wat je bedoelt.. bedoel je te zeggen dat ik de id-volgorde moet veranderen zodra er in een plek tussen record iets ingevoerd wordt?

zou je er misschien een klein voorbeeldje van kunnen geven?

alvorens bedankt..

ivan
Offline Analog - 11/01/2007 13:50 (laatste wijziging 11/01/2007 13:51)
Avatar van Analog HTML interesse Ik heb een functie geschreven die hier een beetje op lijkt.
Bij een groot aantal records zal hij wel veel queries uitvoeren dus dat moet je misschien ff aanpassen (ik ben er zelf ook nog mee bezig) maar misschien kan het je een beetje op weg helpen 

  1. <?
  2. function ChangeOrder($id_update, $dir, $curplace, $cat_id)
  3. {
  4. // first we need to find and update all menuitems that are affected by updating the menustructure
  5. if($dir=="up")
  6. {
  7. $cat_above = $curplace-1;
  8. $query = "SELECT id FROM mc_prod_cat WHERE (mc_cat_id = $cat_id) AND (place=$cat_above)";
  9. //echo $query;
  10. $rs = mysql_query($query);
  11. $nrs = mysql_num_rows($rs);
  12.  
  13. if($nrs!=0)
  14. {
  15. $id = mysql_result($rs, 0);
  16. $query = "UPDATE mc_prod_cat SET place='$curplace' WHERE id=$id";
  17. mysql_query($query);
  18. $query = "UPDATE mc_prod_cat SET place='$cat_above' WHERE id=$id_update";
  19. mysql_query($query);
  20. }
  21. }
  22. if($dir=="down")
  23. {
  24. $cat_below = $curplace+1;
  25. $query = "SELECT id FROM mc_prod_cat WHERE (mc_cat_id = $cat_id) AND (place=$cat_below)";
  26. $rs = mysql_query($query);
  27. $nrs = mysql_num_rows($rs);
  28.  
  29. if($nrs!=0)
  30. {
  31. $id = mysql_result($rs, 0);
  32. $query = "UPDATE mc_prod_cat SET place='$curplace' WHERE id=$id";
  33. mysql_query($query);
  34. $query = "UPDATE mc_prod_cat SET place='$cat_below' WHERE id=$id_update";
  35. mysql_query($query);
  36. }
  37. }
  38. }
  39.  
  40. ?>
Offline Thomas - 11/01/2007 14:00 (laatste wijziging 11/01/2007 14:13)
Avatar van Thomas Moderator Ik zou gewoon van een auto_increment id gebruik blijven maken en een nieuwe kolom introduceren ("positie" of wat dan ook) waarmee je handmatig de positie in kunt stellen. Voor het bijwerken van een item (hierbij refereer je naar het auto-increment id) maak je dan een functie, zoals hierboven beschreven wordt, maar dan anders .

Wat je ook zou kunnen doen is een kolom maken waarin je het auto-increment id van de (vorige) buurman opslaat. Dat is wellicht nog makkelijker. Dit wordt dan een soort van enkel gelinkte lijst. Je kunt dan oplopend op buurman sorteren.

De (vorige) buurman van het eerste element is 0.
Dit lijkt me de beste oplossing.

Je hebt dan trouwens in elke tussenvoeging of wat dan ook maar 2 update-statements nodig.

Omnummeren van de auto-increment id's lijkt me overigens een slecht idee omdat deze id's wellicht ook aan andere tabellen gekoppeld zijn.
Offline ikkedikke - 11/01/2007 19:51 (laatste wijziging 11/01/2007 19:51)
Avatar van ikkedikke PHP expert als je niet iets met de ID's wil doen kan je trouwens het volgende proberen:
  1. id | name | content | order
  2. ----------+---------+------
  3. 0 | job | article |1
  4. 1 | robbin | article |2
  5. 2 | tamar | article |3
  6. 3 | tamar | article2 |35

zorg dat order als varchar is ingesteld en niet als getal, anders werkt het niet.
wanneer je nu een record tussen 1 en 2 wil invoegen zet je er gewoon een 5 achter (dus 15).
Wanneer je iets tussen 3 en 35 in wil zetten zet je als order 34 oid.
Dit is niet de nette manier maar het kan ook.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.186s