peppino: gleiche einträge suchen und der größe nach sortieren!

Hallo zusammnen!

Ich komme bei einer ich hoffe simplen DB-Abfrage nicht weiter.

Ich habe in einer Tabelle die Felder "name" und "test".

Es gibt jetzt mehrere Einträge mit dem gleichen "name" aber der wert in test kann "ja" oder "nein" sein.

Ich möchte jetzt aufgelistet haben, welche "name" die meisten "ja" hat.
Also die Top5 dann in einer Tabelle

1. "name1" mit 5 "ja"
2. "name2" mit 3 "ja"
usw.

Hoffe Ihr könnt mir helfen.
Vielen Dank schonmal

Gruß Peppino

  1. Grüße,
    GROUP BY name und dann abzählen - das ist finde ich wofür variable variablennamen gut sind ;) eine if mit +/- in der shcleife und gut ist...

    aber es gibt sicher eine elegantere lösung.
    MFG
    bleicher

    --
    __________________________-
    Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
    http://www.sexgott-or-not.com/?test=428054
    1. Hi bleicher,

      GROUP BY name und dann abzählen - das ist finde ich wofür variable variablennamen gut sind ;) eine if mit +/- in der shcleife und gut ist...

      Wenn du nur GROUP BY name verwendest, erhältst du pro existentem Namen nur ein Ergebnis in der Resultmenge. Da du von "if mit +/-" redest, meinst du wohl eher WHERE test = "ja" und dann willst du das Ergebnis durchzählen.

      aber es gibt sicher eine elegantere lösung.

      In der Tat. Ohne es jetzt getestet zu haben, sollte prinzipiell folgendes funktionieren:

      SELECT  
        name,  
        COUNT(*) AS anzahl  
      FROM  
        tabelle  
      GROUP BY  
        name  
      HAVING  
        test = 'Ja'  
      ORDER BY  
        anzahl DESC
      

      Viele Grüße,
        ~ Dennis.

      1. Hi bleicher,

        GROUP BY name und dann abzählen - das ist finde ich wofür variable variablennamen gut sind ;) eine if mit +/- in der shcleife und gut ist...

        Wenn du nur GROUP BY name verwendest, erhältst du pro existentem Namen nur ein Ergebnis in der Resultmenge. Da du von "if mit +/-" redest, meinst du wohl eher WHERE test = "ja" und dann willst du das Ergebnis durchzählen.

        aber es gibt sicher eine elegantere lösung.

        In der Tat. Ohne es jetzt getestet zu haben, sollte prinzipiell folgendes funktionieren:

        SELECT

        name,
          COUNT(*) AS anzahl
        FROM
          tabelle
        GROUP BY
          name
        HAVING
          test = 'Ja'
        ORDER BY
          anzahl DESC

        
        >   
        >   
        > Viele Grüße,  
        >   ~ Dennis.  
          
        Hallo Dennis,  
          
        erstmal vielen Dank.  
        wie oben beschrieben, bin ich noch im Anfangsstadium.  
        Wenn Du mir jetzt noch die fehlenden Zeilen posten könntest, damit ich die benötigten Variablen in eine Tabell bz. einen Text einsetzen kann, würdest mich für heute Abend noch richtig glücklich  machen ;)  
          
        Gruß Marcus
        
      2. echo $begrüßung;

        Ohne es jetzt getestet zu haben, sollte prinzipiell folgendes funktionieren:

        SELECT

        name,
          COUNT(*) AS anzahl
        FROM
          tabelle
        GROUP BY
          name
        HAVING
          test = 'Ja'
        ORDER BY
          anzahl DESC

          
        Nein, das funktioniert prinzipiell nicht, da HAVING sich nur auf das beziehen kann, was in der SELECT-Klausel aufgezählt wurde, sprich: sich bereits in der vorläufigen Ergebnismenge befindet. Wenn nur alle ja-Datensätze benötigt werden, kann man die schon mit WHERE filtern.  
          
          
        echo "$verabschiedung $name";
        
        1. Hi dedlfix,

          […] da HAVING sich nur auf das beziehen kann, was in der SELECT-Klausel aufgezählt wurde, sprich: sich bereits in der vorläufigen Ergebnismenge befindet. Wenn nur alle ja-Datensätze benötigt werden, kann man die schon mit WHERE filtern.

          Stimmt, du hast natürlich Recht. Ich verwechsle irgendwie immer die Reihenfolge, in der HAVING und WHERE abgearbeitet werden ;-)

          @Marcus: Also nach FROM tabelle eine WHERE test = "Ja" einfügen und das HAVING test = "Ja" streichen.

          Viele Grüße,
            ~ Dennis.

          1. echo $begrüßung;

            Ich verwechsle irgendwie immer die Reihenfolge, in der HAVING und WHERE abgearbeitet werden ;-)

            Die Faustregel lautet: So wie die Klauseln notiert sind / werden müssen. Ausnahme: Die Feldliste von SELECT wird zwischen GROUP BY und HAVING ausgewertet.

            Dementsprechend kann man in den Klauseln nur auf die Werte und Bezeichner zugreifen, die bereits in den vorangegangenen Klauseln ausgewertet wurden. Beispielsweise kann WHERE nicht auf Feldlistenaliasse zugreifen, HAVING und ORDER BY können das. WHERE kann aber Tabellenaliasse verwenden.

            echo "$verabschiedung $name";

    2. Hallo

      Also bin php/sql Anfänger, und zur Zeit suche ich mir immer code-schnipsel zusammen aus 1000 foren, und passe die dann für mich an.
      sprich ich habe keine ahnung wie ich eine komplette abfrage schreiben muss weiss aber wie ich eine fertige abfrage lesen und verstehen muss :(
      also für codes wäre ich sehr dankbar.

      Gruß Peppino