sortieren nach Häufigkeit

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • sortieren nach Häufigkeit

    Hi,

    komme gerade mit der Arbeit an meinem Diplomarbeit-Projekt nicht weiter.

    Folgendes Problem:
    aus einer MySQL-Tabelle habe ich nach bestimmten Suchkriterien verschiedene Namen
    herausgelesen. Manche Namen kommen öfter vor als andere.

    Beispiel:
    id: Name:
    2 Marte
    5 Tom
    25 Anne
    58 Tom
    ...

    Wie kann ich nun den am häufigsten vorkommenden Namen (in diesem Fall "Tom")
    mir ausgeben lassen?
    Kann mir jemand vielleicht helfen?

    Grüße.
    yaga

  • #2
    teste mal
    Code:
    SELECT Name FROM tabelle HAVING MAX(COUNT(Name))
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Code:
      SELECT COUNT(*) AS anzahl,name FROM tabelle GROUP BY name ORDER BY anzahl DESC LIMIT 1;
      durch das GROUP BY name werden alle Zeilen, wo name gleich ist zusammengewürfelt und mit COUNT(*) AS anzahl gezählt und der Wert dann in anzahl umbenannt. Durch das ORDER BY anzahl DESC wid das ganze in absteigender Reihenfolge sortiert und durch das LIMIT 1 kriegst du nur die oberste Zeile (ergo der Name, der am häufigsten vorkommt zusammen mit der Zahl, wie oft er vorkommt)

      ist umständlich, aber funktioniert

      @Abraxax:
      ERROR 1111: Invalid use of group function
      hopka.net!

      Kommentar


      • #4
        Original geschrieben von Hopka
        @Abraxax:
        ERROR 1111: Invalid use of group function


        dann muss doch noch ein GROUP BY mit rein. hatte es auch nicht getestet.

        so könnte es aber klappen. (ungetestet )
        Code:
        SELECT Name FROM tabelle GROUP BY Name HAVING MAX(COUNT(Name))
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          getestet:
          ERROR 1111: Invalid use of group function

          Sorry, aber du bist dismissed
          hopka.net!

          Kommentar


          • #6
            Sorry, aber du bist dismissed
            OffTopic:
            egal. wenn deines klappt und er zufrieden damit ist, ist's doch ok...
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Dank

              Danke Euch!!
              werde es gleich ausprobieren.

              Grüße.
              yaga

              Kommentar


              • #8
                Die Sache ist etwas komplizierter, weil ich die Spalte Anzahl nicht habe außerdem bediene ich mich etwas merkwürdiger Mechanismen um mir jedesmal die darauf folgende Zeile ausgeben zu lassen. Erst hier soll nach Häufigkeit sortiert werden.



                $result = mysql_query("SELECT * FROM tabelle where suchkriterium like '$suchkriterium'");

                while($row = mysql_fetch_array($result)) {

                $id = $row['id'];

                $result2 = mysql_query("SELECT name FROM chat where id = '$id'+1");

                while($row = mysql_fetch_array($result2)) {

                echo $row['name']."<br><br>";}

                }


                Vielleicht habt ihr Vorschläge wie man es besser machen kann? Als Anfänger bastelt man halt so vor sich hin bis irgend etwas klappt.

                yaga

                Kommentar


                • #9
                  hä? was willst du jetzt genau ?
                  Code:
                  SELECT COUNT(*) AS anzahl,name FROM tabelle GROUP BY name ORDER BY anzahl DESC LIMIT 1;
                  dient dazu, dir den Namen auszugeben, der am häufigsten vorkommt. Die Spalte anzahl brauchst du nicht, die wird wärend dieses Queries nur als "Hilfsspalte" definiert, damit das später einfacher geht.
                  Wenn du jetzt alles haben willst, nur nach der Häufigkeit der Namen sortiert, dann läusst du einfach das LIMIT 1 weg:
                  Code:
                  SELECT COUNT(*) AS anzahl,name FROM tabelle GROUP BY name ORDER BY anzahl DESC;
                  Wenn du jetzt noch ein Suchkriterium einbauen willst, ist das auch kein Problem:
                  Code:
                  SELECT COUNT(*) AS anzahl,name FROM tabelle GROUP BY name ORDER BY anzahl DESC WHERE <bedingung>;
                  das würde dir jetzt alle verschiedenen Namen ausgeben sortiert nach häufigkeit in absteigender Reihenfolge, wo die Bedingung erfüllt ist.
                  hopka.net!

                  Kommentar


                  • #10
                    Es funktioniert!

                    Supa.

                    Die Spalte Anzahl hat mich nur verwirrt, aber es funktioniert. Vielen Dank nachmal!

                    Schöne Grüße.
                    yaga

                    Kommentar

                    Lädt...
                    X