Aufruf einer Tabellenspalte automatisch zählen, ohne extra update auszuführen
am 18.09.2006 16:21:00 von Tatjana Hussel
Ich habe meine Seiten in einer mysql Datenbank gespeichert, ich rufe sie so
auf
$sql = "SELECT titel,text,count FROM seiten WHERE id = '1'";
$result = mysql_query($sql);
$seite = mysql_fetch_object($result);
anschliessend mach ich ein Update des Datensatzen und setzte den Zähler bei
"count" um einen höher.
Jeztzt kommt die FRage: Kann man den Zähle rnicht schon beim Auslesen des
Datensatzes hochsetzten, ohne extra noch update auszuführen?
Tatjana
Re: Aufruf einer Tabellenspalte automatisch zählen, ohne extra update auszuführen
am 18.09.2006 18:08:00 von Axel Schwenke
"Tatjana Hussel" wrote:
> $sql = "SELECT titel,text,count FROM seiten WHERE id = '1'";
> $result = mysql_query($sql);
Hier fehlt der Connection-Identifier. Es ist sehr schlechter Stil, den
nicht zu setzen. Außerdem ist `id` doch numerisch, oder? Dann gehören
keine Anführungszeichen um die 1.
> $seite = mysql_fetch_object($result);
Fehlerbehandlung fehlt auch. Ich hoffe mal, das war nur ein vereinfach-
tes Beispiel und der richtige Code sieht besser aus ...
> anschliessend mach ich ein Update des Datensatzen und setzte den Zähler bei
> "count" um einen höher.
>
> Jeztzt kommt die FRage: Kann man den Zähle rnicht schon beim Auslesen des
> Datensatzes hochsetzten, ohne extra noch update auszuführen?
Nein. Oder vielmehr Jein. Warum möchtest du das? Was ist verkehrt an
UPDATE seiten SET count=count+1 WHERE id=1
Falls es wirklich ganz wichtig ist, daß der Zähler atomar inkrementiert
wird und du gleichzeitig die Daten ausliest, dann geht das mit einem
kleinen Trick:
UPDATE seiten SET titel=@titel:=titel, text=@text:=text,
count=(@count:=count)+1 WHERE id=1
SELECT @titel, @text, @count
Das UPDATE erhöht deinen Zähler und speichert die Werte der interessie-
renden Spalten in User-Variablen. Das SELECT liest anschließend die
Variablen aus.
Aber bei einem Zugriffszähler für Webseiten ist das ziemlich sinnfrei.
Wenn zwei Leute gleichzeitig auf die Seite zugreifen (so daß der eine
sein SELECT zwischen SELECT und UPDATE des anderen schieben kann) dann
bekommen halt beide die gleiche Zahl gezeigt. Auf die Zählung hat das
keinen Einfluß, die funktioniert auch mit dem separaten UPDATE korrekt.
XL