Tutorials
[ Zurück ]


Datenbank reorganisieren


Viele kennen dieses Problem ...  
Man hat eine gut gefüllte Datenbank, aus welcher auch ab und zu Daten gelöscht werden z.B. wenn ein Mitglied den Clan verlässt  
oder ein Member das Forum verlässt.  
  
Enthält die Tabelle nun eine Spalte mit einem auto_increment Wert wie z.B. eine ID, so wird auch dieser Wert gelöscht.  
  
Beispiel: ID|Name|Vorname  
  
          1|Meier|Klaus  
          2|Brot|Peter  
          3|Müller|Jürgen  
  
Löschen wir nun z.B den 2. Eintrag, also Brot, Peter blieben dann noch die ID 1 und 3 übrig.  
Kommt nun ein neuer Eintrag hinzu hätte dieser die ID 4.  
Wie man sieht bleibt durch die Löschung nun die ID 2 unbesetzt.  
Dies ist zwar nicht weiter schlimm wenn man die Inhalte der Datenbank ausliest, aber schaut man sich die tabelle dann mal mit  
phpMyAdmin an ist es doch etwas unübersichtlich, gerade bei großen Tabellen mit sagen wir mal 100000 Einträgen.  
  
Um dies zu reparieren, gibt es sicherlich einige Methoden, wie z.B. die gelöschte ID aufschreiben oder irgendwo zwischenspeichern  
um sie dann wieder bei einem neuen Eintrag nutzen zu können.  
  
Ich habe mir hierzu ein kleines Script geschrieben welches die Tabelle nach dem löschen automatisch reorganisieren kann.  
Wie ihr die Datei einbindet oder aufruft ist euch selber überlassen.  
  
Wir erstellen zuerst eine php Datei, nennen wir sie mal reorganize.php  
  
<?php  
define ( 'MYSQL_HOST','yourhost' );  
define ( 'MYSQL_BENUTZER','benutzer' );  
define ( 'MYSQL_KENNWORT','passwort' );  
define ( 'MYSQL_DATENBANK','datenbank' );  
  
$connect = mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);  
  
mysql_select_db(MYSQL_DATENBANK, $connect);  
  
if(!$connect)  
{  
    die('Keine Verbindung möglich: ' . mysql_error());  
}  
  
//1. Abschnitt  
$abfrage1 = '(SELECT * FROM tablename)'; // alle Daten aus der Tabelle abfragen  
$query1 = mysql_query( $abfrage1 ) or die ("Datenbankfehler: " . mysql_error());  
  
// wir erstellen 3 arrays um die abgerufenen Daten darin zwischen zu speichern  
$id=array();  
$name=array();  
$vorname=array();  
  
while ($row = mysql_fetch_object($query1)) // während der Abfrage also von Eintrag 1 bis zum letzten ...  
{  
        // ... schreiben wir die Werte aus den Spalten in unsere arrays  
    array_push($id,$row->ID);  
    array_push($name,$row->Name);  
    array_push($vorname,$row->Vorname);  
}  
//2. Abschnitt  
//nachdem nun unsere Daten in den arrays zwischengespeichert sind ...  
  
$abfrage2 = "TRUNCATE TABLE tablename"; //... leeren wir die gesamte Tabelle  
$query2 = mysql_query( $abfrage2 ) or die ("Datenbankfehler: " . mysql_error());  
//3. Abschnitt  
// nun bereiten wir unsere 3. Abfrage vor um die daten aus den arrays wieder in die tabelle zu schreiben  
  
//1. Zeile unseres Query-Strings, bestehend aus den jeweils ersten Werten unserer arrays  
$start = " VALUES ('$id[0]', '$name[0]', '$vorname[0]')";  
  
$werte = ''; //string Variable  
  
for($i=1;$i<count($id);$i++) //WICHTIG i=1 ist der 2. Wert in unseren arrays !!!  
{       
       //wir erweitern den string um jedem weiteren Wert in unseren arrays  
       $werte .= ", ('$id[$i]', '$name[$i]', '$vorname[$i]')";  
}  
  
$ende = ';'; //das Ende unseres Query-Strings  
//nun stellen wir uns den kompletten string für die 3. und letzte Abfrage zusammen  
$abfrage3 = "INSERT INTO `tablename` (`ID` , `Name` , `Vorname`)"; //unsere Tabelle und deren Spalten  
$abfrage3 .= $start; // daran hängen wir die Variable $start (siehe oben)  
$abfrage3 .= $werte; // nun die Variable $werte (siehe oben)  
$abfrage3 .= $ende;  // zu guterletzt schließen wir unseren Query-String mit $ende (siehe oben)  
$query3 = mysql_query($abfrage3);  
  
if($query3)  
{  
    echo 'Glückwunsch die Tabelle wurde reorganisiert :-)';  
}  
  
?>  
  
Die Tabelle sollte nun wieder komplett reorganisiert sein.  
Angenommen wir haben 10000 Einträge in der Tabelle aber die nächste ID wäre 10005 bei einem neuen Eintrag, weil 5 Einträge  
gelöscht wurden, so könnt ihr nun sehen das nach der Reorganisation keine ID mehr fehlt, denn nun ist die nächste ID so wie  
es sein sollte 10001.  
  
Ich hoffe der eine odere andere von euch hat etwas Nutzen davon :-)

Erstellt:25.10.13 08:43
Autor: meineahnen

Letzte Änderung:
Geändert von:

Bewertungen:0
Bewertung:

Freigeschaltet: Ja
Views 2372

Klicke einfach auf einen Stern!
Wollen Sie wirklich das Tutorial löschen?
Wollen Sie wirklich dieses Tutorial zulassen?
Betreff: Report tutorial [id = 767] !
Absender:
Kommentar:
Wollen Sie wirklich dieses Tutorial zulassen?
Absender:
Kommentar:
Folgende User sind hier gerade aktiv:
-

ANZEIGE