29. marts 2005 - 00:43Der er
7 kommentarer og 1 løsning
Problem ved sletning af post i phpmyadmin/mysql
Når jeg sletter en post i phpmyadmin/mysql, opstår der det problem at min indekskolonne i tabellen "går i stykker" - jeg har brug for at den bagefter har den samme kronologiske rækkefølge som før.
Den har f.eks. rækkefølgen 1,2,3,4,5,6,7,8,9,10 til at starte med, og bagefter rækkefølgen 1,3,5,7,9,10 - hvor jeg så har slettet posterne med med indeks 2,4,6,8.
Mit mål er at få tabellens indekskolonne til at se således ud efter sletning: 1,2,3,4,5,6.
Hvordan kan jeg gøre det med PHP?? - jeg har vel brug for en slags gennemløbning af tabellen, og det ville være rarest om den funktion kunne sidde i mit slettedokument!
Det lyder for mig som et designproblem. Du bør kunne opnå det samme uden at være afhængig af din indekskolonne... Mht. at "reindeksere" er det jo blot at selecte alle rækker ud, og update dem der hvor det er nødvendigt. Pseudokode:
$qh = mysql_query( "SELECT * FROM tabel" ); $realnum = 0; while ( $row = mysql_fetch_assoc( $qh ) ) { $realnum++; if ( $row['indekskolonne'] != $realnum ) { // Update databasen her } }
Men tro mig - du ønsker ikke at reindeksere hver gang der bliver slettet. Og din auto-nummerering kan ikke bruges, for den fortsætter fra hvad der før var den højeste - selvom du renummererer.
Det er som coderdk siger et designproblem og du bør ontænke dit databasedesign kraftigt :)
Det vil kunne lade sig gøre, men det vil være ret dumt - vil jeg mene. Så skal man i stedet hver gang hive samtlige rækker ud, truncate tabellen (og dermed nulstille auto-increment) og indsætte alle rækkerne igen - nu fortløbende nummereret via auto-id'et.
Men det er noget bøvl og det skal slet ikke laves sådan. Det bør derimod styres af den omliggende PHP kode i stedet for.
Nå men nu har jeg ændret i tabel-designet og det funker omsider - så tak for advarslen Barklund... Jeg re-nummerer nu i en ekstra pseudo-indeks-kolonne som PHP'en istedet læser, så nu er jeg fri for al den "auto-increment/antal-skjulte-skrevne-rækker"-problematik... :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.