login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[MYSQL] Variable update

Offline Milannetjuhh - 27/03/2007 19:57
Avatar van MilannetjuhhNieuw lid Ik had ergens gelezen dat als je een id met auto-incresement in je db hebt dat als je er dan iets uithaald, dat dan niet automatisch alles 1 omlaagt schuift (als dat wel kan hoe??)

Maar ik heb dat dus proberen te doen met dit(er moet nog wel een delete functie tussen, maar die heb ik maar ff weggehaald voor het gemak):
  1. <?php
  2. $query ="SELECT
  3. id
  4. FROM
  5. nieuwssysteem
  6. WHERE
  7. id > $del";
  8. $info = mysql_query($query);
  9. while ($row = mysql_fetch_assoc($info))
  10. {
  11. $new_id = $row["id"] - 1;
  12. }
  13. $query ="UPDATE
  14. nieuwssysteem
  15. SET
  16. id = '".$new_id."'
  17. WHERE
  18. id = '".$row["id"]."'";
  19. mysql_query($query);
  20. ?>

6 antwoorden

Gesponsorde links
Offline Gerard - 27/03/2007 20:03
Avatar van Gerard Ouwe rakker
Citaat:
Ik had ergens gelezen dat als je een id met auto-incresement in je db hebt dat als je er dan iets uithaald, dat dan niet automatisch alles 1 omlaagt schuift (als dat wel kan hoe??)
Dit verhaal is al vaker op het forum aangehaald en hier bestaat eigenlijk maar 1 antwoord voor; niet doen.

Het ID wat je aanmaakt met auto_increment is uniek, hieraan is het betreffende row te herkennen. Wanneer je alles weer 'netjes' op een rijtje wilt hebben dan zal je ook ALLE referenties moeten veranderen die naar dat bepaalde row verwijzen.

Als je dus comments hebt op een nieuwsartikel (ID: 13) en je verwijdert het nieuwsartikel met ID 12, dan zal je dus alles opnieuw moeten laten nummeren (wordt 13 dus de nieuwe 12), zal je de comments van 12 moeten verwijderen en de comments van 13 moeten updaten dat ze naar 12 verwijzen in de toekomst. En dit is dan nog maar van 1 rij. Stel dat je 600 nieuwsberichten hebt en je ID 551 wilt verwijderen. Dan dien je dus 48 rijen te updaten, niet echt een prettig idee.
Offline Milannetjuhh - 27/03/2007 20:18
Avatar van Milannetjuhh Nieuw lid Nee, ik verander namelijk alleen de id,
als er iets gedelete wordt, dan wordt er bij alles wat er boven zit -1 gedaan. dus dan hoef ik alleen het id te veranderen, das toch wel te doen??
Offline Gerard - 27/03/2007 20:18
Avatar van Gerard Ouwe rakker Dat ID is toch uniek... en wat nou als er zaken verwijzen naar dat ID... of mensen bookmarks hebben waarbij ze bij dat ID een bepaald item verwachten.

Gewoon niet doen dus 
Offline DenMette - 28/03/2007 06:57
Avatar van DenMette PHP gevorderde laat die id gewoon optellen.

Als je hier in de poll naa vroegere polls ging kon het ook eens zijn dat er een Poll ontbreekt. Ik heb een nieuwsbericht dat op ID:100 staat laat dat daar staan en zet dat niet terug naar ID:5.

Een ID is zoals reeds vermeld een Unieke waarde. Deze zal altijd optellen. Dus laat deze voor war hij is.
Offline Dark_Paul - 28/03/2007 09:18
Avatar van Dark_Paul PHP ver gevorderde Waarom zou je eigenlijk die id-s netjes aansluitend willen hebben?
Als je je rijen wilt nummeren (1, 2, 3, enz.) kan je ook een teller mee laten lopen in de while-loop.

  1. <?php
  2. $i=1;
  3. //query
  4. while () {
  5. echo $i.$info;
  6. $i++;
  7. }
  8. ?>
Offline Ibrahim - 28/03/2007 17:28
Avatar van Ibrahim PHP expert en als je zo graag nummertjes op een rij wilt hebben, kun je toch gewoon een extra veldje ernaast zetten genaamd "nummertje" of zoiets.
Bij het verwijderen pas je gewoon dat veld aan, dan heb je geen problemen die Proximus hierboven heeft verteld.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.174s