Sortierung nach Anzahl der Vorkommen

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

  • Sortierung nach Anzahl der Vorkommen

    Moin,

    nehmen wir an, ich habe zwei Tabellen (threads und antworten) mit jeweils einer interessanten Spalte:

    threads.id | antworten.thread
    und die Zeilen:
    1|1
    2|1
    3|2
    4|1
    5|2
    6|4
    7|3
    8|2
    9|2

    So, die 1 kommt drei mal vor, 2 kommt vier mal vor und 3 & 4 weniger.
    Ich möchte jetzt diese Liste bekommen, sodass per Häufigkeit sortiert wird:
    2
    1
    3
    4

    Sprich: Gebe den Inhalt der Spalte 'thread' nach Häufigkeit (DESC) wieder.
    Geht das mit einer Abfrage?

    Mein Versuch bisher:
    PHP-Code:
    mysql_query("SELECT * FROM threads JOIN antworten, COUNT(*) AS thread
    FROM antworten
    GROUP BY id
    ORDER BY antworten.thread DESC"
    ); 
    Danke im Vorraus.

  • #2
    Da fehlt das Argument, anhand dessen Du joinst ?!?
    Yeah !

    Kommentar


    • #3
      ääähmm....

      bewirkt diese Abfrage bis jetzt denn mehr als nur einen Fehler zu produzieren??

      nach FROM nochmal eine ergebnisspalte zu definieren ist mir zumindest neu... und auch dass da dann nochmal ein FROM daherkommt

      Edit:
      und natürlich dann noch das was vor mir gepostet wurde: Join erstmal erklären anhand von was es denn joinen soll...
      Zuletzt geändert von Quetschi; 25.03.2005, 16:34.
      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
      Schön - etwas Geschichte kann ja nicht schaden.
      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

      Kommentar


      • #4
        Danke schonmal für die Antworten.

        Naja, JOINen soll er ja die Tabelle antworten und wie man das zweite FROM richtig schreibt, weiß ich leider trotz Recherche nicht.

        Kommentar


        • #5
          Gibt es denn in der einen Tabelle einen Primary und in der anderen einen secondary key, auf den Du Dich referenziell beziehen kannst ?

          Poste mal Deine Tabellenstruktur und schrieb hinter Deine Abfrage "or die (mysql_error());"
          Yeah !

          Kommentar


          • #6
            threads
            - id

            antworten
            - id
            - thread


            Meine Abfragenerrormeldung bemängelt ja nur die 'grammatikalische' Struktur meiner Abfrage, weil mir die Umsetzung ja unbekannt ist. Mehr sagt mir mysql_error() da nicht.

            Gibt es denn in der einen Tabelle einen Primary und in der anderen einen secondary key, auf den Du Dich referenziell beziehen kannst ?
            Hm, verstehe ich leider schon nicht mehr.

            ------------

            threads.id | antworten.thread
            und die Zeilen:
            1|1
            2|1
            3|2
            4|1
            5|2
            6|4
            7|3
            8|2
            9|2

            So, die 1 kommt drei mal vor, 2 kommt vier mal vor und 3 & 4 weniger.
            Ich möchte jetzt diese Liste bekommen, sodass per Häufigkeit sortiert wird:
            2
            1
            3
            4

            Kommentar


            • #7
              Code:
              SELECT
                  t.name,
                  COUNT(a.thread) AS thread_sum
              FROM
                  threads t
                      INNER JOIN antworten a ON ( a.thread = t.id )
              GROUP BY
                  t.name
              ORDER BY
                  a.thread_sum DESC
              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


              • #8
                Super, danke.

                Wofür ist t.name ? Erkennt meine DB auch nicht.

                Nebenbei habe ich es an meine deutschen Tabellentitel und Spalten angepasst, ich sollte also damit nur die Namen verändert haben.
                Code:
                SELECT
                    t.name,
                    COUNT(a.thread) AS themen_sum
                FROM
                    forum_themen t
                        INNER JOIN forum_antworten a ON ( a.thema= t.id )
                GROUP BY
                    t.name
                ORDER BY
                    a.themen_sum DESC

                Kommentar


                • #9
                  Wofür ist t.name ? Erkennt meine DB auch nicht.
                  Streiche t.name setze t.id
                  Yeah !

                  Kommentar


                  • #10
                    Ja, und ORDER BY thread_sum muss es ja sein.

                    Klasse, es funktioniert. Jetzt habe ich Spaß damit.

                    Kommentar


                    • #11
                      Original geschrieben von Reklavit
                      Wofür ist t.name ?
                      das ist dafür, dass du auch den namen des threads bekommst.

                      wenn das feld nicht name ist , nimm halt den richtigen spaltennamen dafür
                      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


                      • #12
                        Ja, jetzt habe ich's verstanden.

                        Kommentar

                        Lädt...
                        X