wucher wichtel: + (PHP) Zahl um eins erhöhen

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

--
Ein japanisch-deutsches Gedicht
sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
  1. 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

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. sum() summiert Zahlen aus verschiedenen Zeilen einer Tabelle
      Ich denke du meintest count()

      1. Hi roebert!

        sum() summiert Zahlen aus verschiedenen Zeilen einer Tabelle
        Ich denke du meintest count()

        Richtig. ;-)
        Danke für deine Berichtigung.

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    2. 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

      --
      Ein japanisch-deutsches Gedicht
      sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
      1. 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

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
        1. 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

          --
          Ein japanisch-deutsches Gedicht
          sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
          1. 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";

      2. 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

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. 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