quakenet:#php Tutorial

Author: Progman, zuletzt bearbeitet von progman @ 2004/06/18 13:12:50

Bitte beachten Sie, dass die Tutorialkapitel zusammenhängen. Wenn sie direkt auf ein Kapitel verlinkt wurden müssen Sie gegebenenfalls die vorherigen Kapitel auch lesen. Achten Sie beim lesen darauf, dass Sie kein Kapitel überspringen.

Datensätze in der Tabellen ändern

  1. Ändern von Werten
  2. Syntax von UPDATE
  3. Die WHERE Bedingung

1. Ändern von Werten

Wir wissen jetzt wie wir eine Tabelle mit Datensätzen füllen und wie wir diese Datensätze auslesen können. Doch vielleicht möchten wir ja in einem Adminbereich z.B. die Newsbeiträge bearbeiten, weil sich da ein Fehler eingeschlichen hat oder so. Um Datensätze in einer Tabelle zu bearbeiten benutzen wir den MySQL Befehl UPDATE.

2. Syntax von UPDATE

Die Syntax von UPDATE sieht wie folgt aus.

UPDATE
    tabelle
SET
    spaltendefinition;
        

Da wo jetzt tabelle steht fügen wir dann den Namen der Tabelle ein, in der wir die Datensätze bearbeiten wollen.

UPDATE
    News
SET
    spaltendefinition;
        

Bei spaltendefinition kommen dann die Spaltennamen und die dazugehörigen Werte. Die Spalten und Werte werden dabei so angegebene.

spalte = 'wert'
        

Wenn man mehrere Spalten gleichzeitig bearbeiten möchte, muss man jedes spalte = wert mit einem Komma trennen.

spalte = 'wert', spalte2 = 'foo', spalte3 = 'bla'
        

Ein Beispiel UPDATE-Befehl könnte dann so aussehen.

UPDATE
    News
SET
    Autor = 'Progman', Datum = NOW();
        

Zur besseren Übersicht sollte man hinter jedem Komma ein Zeilenumbruch machen. Dann sieht man sofort welche und wieviele Spalten bearbeitet werden.

UPDATE
    News
SET
    Autor = 'Progman',
    Datum = NOW();
        

Statt einen festen Ausdruck oder den Rückgabewert einer Funktion kann man auch andere Werte speichern. Man kann z.B. noch auf den alten Spaltenwert zugreifen und mit denen z.B. rechnen. Dies würde dann so aussehen.

UPDATE
    Counter
SET
    Hits = Hits + 1;
        

Dies erhöht z.B. den Counter um 1. Hier spart man sich den Weg über PHP mit SELECT, dann $var++ und dann wieder zurückschreiben.

3. Die WHERE Bedingung

Ich greif das Beispiel mit den News nochmal auf.

UPDATE
    News
SET
    Autor = 'Progman',
    Datum = NOW();
        

Dieser UPDATE-Befehl verändert nun die Werte der Spalten Autor und Datum mit den angegebenen Werten. Doch im welchem Datensatz?

So wie es jetzt da steht wird jeder Datensatz in dieser Tabelle bearbeitet. Nach diesem Befehl haben alle Datensätze in dieser Tabelle in der Spalte Autor den Wert Progman und in der Spalte Datum das aktuelle Datum gespeichert. Nun, das wollen wir aber nicht. Wir wollen nur einen ganz bestimmten Datensatz oder nur bestimmte Datensätze bearbeiten. Welche Datensätze wir mit diesem UPDATE-Befehl bearbeiten wollen geben wir mit der WHERE-Bedingung an. Die WHERE-Bedingung wird dann hinter dem UPDATE Befehl angehängt.

UPDATE
    News
SET
    Autor = 'Progman',
    Datum = NOW()
WHERE
    ID = '5';
        

Dieser UPDATE-Befehl z.B. bearbeitet nur den Datensatz, in der der Wert der Spalte ID den Wert 5 hat. MySQL bearbeitet nur die Datensätze wo diese Bedingung zutrifft. Er geht also jeden Datensatz durch und guckt sich die Bedingung an.

Statt ein einfacher Vergleich kann auch ein komplexer Ausdruck stehen. Bedingungen können mit AND, OR und NOT zusammengebaut werden, wie man es bei der If-Abfrage in PHP kennt.

Diese WHERE-Bedingung kann auch bei SELECT und DELETE FROM verwendet werden wenn man nur bestimmte Datensätze auslesen möchte oder nur bestimmte Datensätze löschen will (zum Löschen von Datensätzen kommen wir später). Bei dem INSERT Befehl kann man keine WHERE-Bedingung benutzen, macht ja auch kein Sinn.

Fragen zum aktuellen Thema

  1. Wie werden die Spaltennamen mit den Werten untereinander getrennt?
  2. Wo kann überall eine WHERE-Bedingung benutzt werden
Wie werden die Spaltennamen mit den Werten untereinander getrennt?

Jedes Paar von Spaltenname und Wert (spalte = 'wert') muss mit einem Komma getrennt werden. Hinter dem letzen Paar von Spaltennamen und Wert kommt kein Komma hin.

Wo kann überall eine WHERE-Bedingung benutzt werden

Eine WHERE-Bedingung kann in einem SELECT, UPDATE oder DELETE FROM Befehl benutzt werden. In einem INSERT-Befehl macht dies kein Sinn und wir auch deshalb als Fehler deklariert wenn so eine WHERE-Bedingung im INSERT-Befehl vorkommt.

Nach oben