+ (PHP) Zahl um eins erhöhen
wucher wichtel
- datenbank
Hallo!
Ich habe in den vergangenen Tage einen kleinen Blog auf Basis von PHP und MySQL geschrieben. Hinzufügen von Einträgen und Kommentaren, und das ganze Zeugs funktioniert soweit. Allerdings habe ich ein Problem, wenn ich angeben will, wie viele Leute schon einen Kommentar zu einem bestimmten Eintrag abgegeben haben (z.B. "3 Kommentare" <- wird verlinkt und führt zum eigentlichen Eintrag). Und irgendwie habe ich nicht so wirklich eine Lösung für dieses Problem. Ich habe es mal so probiert:
Bei jedem neuen Kommentar wird die höchste Zahl in der Spalte "anzahl" ausgelesen und dann um eins erhöht und in das Feld "anzahl" in der Zeile, die den neuen Kommentar speichert, geschrieben. Die Tabelle würde dann irgendwann so aussehen:
name | eintrag | anzahl | "eintrag" speichert, auf welchen
_________|___________|_________| Eintrag sich der Kommentar bezieht.
Heinz | eintrag1 | 1 |
Roland | eintrag1 | 2 | "anzahl" speichert, der wievielte
Gustav | eintrag2 | 1 | Kommentar es zu einem bestimmten
| | | ... Eintrag es ist.
auto_increment wäre zwar perfekt, aber in der Tabelle sollen ja die Kommentare für alle Einträge angezeigt werden. Deswegen darf nicht einfach blind irgendeine Zahl bei "anzahl" erhöht werden. Und eine eigene Tabelle für jeden Kommentar wäre ja auch hirnrissig.
Gibt es eine einfachere Lösung für mein Problem, die ich übersehe? Wie kann ich den höchsten Wert herausfinden? Gibt es dafür einen MySQL-Befehl? Oder geht das mit PHP?
Vielen Dank für eure Hilfe!
ciao, ww
Hi wucher!
Ich nehme an, du speicherst zu jedem Kommentar die ID des Blogeintrags, auf den sich dieser Kommentar bezieht.
Dann brauchst du nämlich nicht die Anzahl der Kommentare in einer Extraspalte angeben, sondern kannst - ganz dynamisch - die Anzahl der Kommentare mit SUM() und WHERE ID = "ID des Blogeintrags" herausfinden.
Dieses System ist wesentlich flexibler und bedarf keiner Verrenkungen.
MfG H☼psel
sum() summiert Zahlen aus verschiedenen Zeilen einer Tabelle
Ich denke du meintest count()
Hi roebert!
sum() summiert Zahlen aus verschiedenen Zeilen einer Tabelle
Ich denke du meintest count()
Richtig. ;-)
Danke für deine Berichtigung.
MfG H☼psel
Hallo!
Vielen Dank an euch beide!
Ich habe jetzt mal versucht, den Vorschlag von Hopsel umzusetzen. Aber irgendwie hakt es. Ich habe im Handbuch nachgeschaut, finde aber dort keine Erklärung. Also:
$getComment = "SELECT
count(entry)
FROM
comments
WHERE entry = 'xss'";
$commentResult = mysql_query($getComment) OR die(mysql_error());
$commentRow = mysql_fetch_assoc($commentResult);
echo $commentRow['entry'];
Scheinbar funktioniert die Abfrage, da keine Fehlermeldung kommt. Aber wie greife ich auf das Ergebnis zu? Mit einer while-Schleife muss ich nicht das Ergebnis ausgeben, weil doch nur ein Ergebnis geliefert wird, oder? Eine while-Schleife brauche ich nur, wenn ich z.B. alle Kommentare auslesen will. Aber nicht, wenn es nur ein Ergebnis ist?!
Vielen Dank für eure Hilfe!
ciao, ww
Hi wucher!
Aber wie greife ich auf das Ergebnis zu?
Am besten du vergibst einen sinnvollen Namen: SELECT count(entry) as Anzahl
...
Oder: echo $commentRow['count(entry)'];
Aber da bin ich mir nicht sicher, ob das funktioniert. ;-)
Mit einer while-Schleife muss ich nicht das Ergebnis ausgeben, weil doch nur ein Ergebnis geliefert wird, oder?
Richtig.
MfG H☼psel
Hallo!
Aber wie greife ich auf das Ergebnis zu?
Am besten du vergibst einen sinnvollen Namen:SELECT count(entry) as Anzahl
...
Cool. Jetzt weißich auch wofür "as" ist. Hab's schon öfters gelesen aber noch nie verwendet.
Oder:
echo $commentRow['count(entry)'];
Aber da bin ich mir nicht sicher, ob das funktioniert. ;-)
Ich habs probiert - es geht nicht. Aber mit as ist es sowieso schöner.
Vielen Dank für die Hilfe! PHP und MySQL gefallen mir immer besser :)
ciao, ww
echo $begrüßung;
Oder:
echo $commentRow['count(entry)'];
Aber da bin ich mir nicht sicher, ob das funktioniert. ;-)
Ich habs probiert - es geht nicht. Aber mit as ist es sowieso schöner.
PHP ist doch so freundlich, den Inhalt eines Arrays inklusive der Namen der Schlüssel anzuzeigen, wenn man dieses Array der Funktion print_r() übergibt. (Ein <pre> vorangestellt erhöht die Übersichtlichkeit der Ausgabe.) Außerdem gibt es alternative Fetch-Funktionen, die ein Array z.B. mit nummerierten Schlüsseln zurückgeben.
echo "$verabschiedung $name";
hi,
Aber wie greife ich auf das Ergebnis zu?
So, wie sonst auch.
Mit einer while-Schleife muss ich nicht das Ergebnis ausgeben, weil doch nur ein Ergebnis geliefert wird, oder? Eine while-Schleife brauche ich nur, wenn ich z.B. alle Kommentare auslesen will. Aber nicht, wenn es nur ein Ergebnis ist?!
Schleifen benutzt du, um eine bestimmte Aktion mehrfach wiederholt auszuführen.
Wenn du eine bestimmte Aktion nur einmal ausführen willst - dann führe sie nur einmal aus.
gruß,
wahsaga
Wie ist im bisherigen Design die Verknüpfung von Artikel und Kommentaren geregelt?
Datenbankdesign ändern!
id - ID des Kommentars
name - Name des 'Kommentargebers'
eintrag - Kommentar
post_id - ID des Posts auf deinem Blog
select count(id) from kommmentare where post_id = aktueller_post