GROUP BY nach Gruppengröße sortieren

  1. sevY

    sevY Thread Starter

    Hi,

    ich führe ein MySQL Select aus, welches mir aus einer Suchhistorie die 5 häufigsten Suchwörtes auswerfen soll:

    Code:
    $query=mysql_query("select search_id,phrase from ".TAB_SEARCH." group by phrase limit 0,5 ",$handler);
    
    Sortiert wird nun nach search_id… ich würde jedoch so sortieren, dass die größte Gruppe abfolgend ausgegeben wird.
     
    sevY, 29.01.2006
  2. Gunter_S

    Gunter_SMacUser Mitglied

    Mitglied seit:
    15.03.2004
    Beiträge:
    147
    Zustimmungen:
    3
    Versuch mal:

    Code:
    $query=mysql_query("select search_id,phrase from ".TAB_SEARCH." group by phrase ORDER BY COUNT(search_id) DESC limit 0,5 ",$handler);
    
    hab das jetzt nicht getestet.

    Gunter
     
    Gunter_S, 29.01.2006
  3. sevY

    sevY Thread Starter

    Funktioniert nicht.
    Ist COUNT() denn überhaupt zulässig in ORDER BY Klauseln?
     
    sevY, 29.01.2006
  4. BenIrminger

    BenIrmingerMacUser Mitglied

    Mitglied seit:
    23.12.2004
    Beiträge:
    326
    Zustimmungen:
    0
    probier mal sowas

    select spalte1, anzahl from
    (
    select spalte1, count(*) as anzahl
    from tabelle
    group by spalte1
    )
    order by anzahl desc

    ob sowas bei mysql geht weiß ich jedoch nicht
     
    BenIrminger, 29.01.2006
  5. a1ien

    a1ienMacUser Mitglied

    Mitglied seit:
    23.06.2003
    Beiträge:
    136
    Zustimmungen:
    0
    in oracle wird sowas mit rownum geregelt. ich werde mal googlen, ob sowas auch in mysql möglich ist.

    gruss a1ien
     
    a1ien, 29.01.2006
  6. Gunter_S

    Gunter_SMacUser Mitglied

    Mitglied seit:
    15.03.2004
    Beiträge:
    147
    Zustimmungen:
    3
    ups, sorry, mein Fehler. Ja COUNT ist zulässig in einer "ORDER BY"-Klausel, habe ich schon oft verwendet.
    Allerdings kann man COUNT nur auf die Spalten anwenden, nach denen auch gruppiert wird. Also am einfachsten "COUNT(*)"

    Wenn das auch nicht klappt, sag nochmal Bescheid, dann muss ich es doch mal testen, ad hoc mache ich da auch oft Fehler.

    Gunter
     
    Gunter_S, 29.01.2006
  7. msslovi0

    msslovi0MacUser Mitglied

    Mitglied seit:
    20.03.2005
    Beiträge:
    2.714
    Zustimmungen:
    115
    Code:
    select count(1) as quantity, search_id, phrase from <table> group by phrase order by quantity desc limit 0,5
    Nein, das sieht nur so aus.

    Matt
     
    msslovi0, 29.01.2006
  8. a1ien

    a1ienMacUser Mitglied

    Mitglied seit:
    23.06.2003
    Beiträge:
    136
    Zustimmungen:
    0
    hi,

    habe noch ein wenig gegooglet und nachgedacht:

    1)bruachste nicht group by sondern order by um die reihnfolge zu setzen
    2)group by bruachste nur bei aggregationen, wie max,min,avg oder auch count, das wird aber sicher in einer unterabfrage gelöst
    3) limit ist wohl der command zum ausgeben bestimmter zeilen, sprich limit 3,6 gibt zeilen 3-6 aus

    hoffe das hat dir geholfen!
     
    a1ien, 29.01.2006
  9. msslovi0

    msslovi0MacUser Mitglied

    Mitglied seit:
    20.03.2005
    Beiträge:
    2.714
    Zustimmungen:
    115
    Beides, um genau zu sein.
    MySQL kennt bis Version 4.1 keine Subselects. Der Threadstarter hat keine Version angegeben, unabhängig davon geht es auch ohne Subselect.

    Matt
     
    msslovi0, 29.01.2006
  10. Gunter_S

    Gunter_SMacUser Mitglied

    Mitglied seit:
    15.03.2004
    Beiträge:
    147
    Zustimmungen:
    3
    Da wirkt sich die Reihenfolge der Datensätze, wie sie abgespeichert sind, aus.

    funktionieren tut:
    Code:
    SELECT search_id,phrase, COUNT(*) as anzahl FROM TABLE GROUP BY phrase ORDER BY anzahl LIMIT 0,5
    
    gerade getestet.

    à propos macht "SELECT search_id..." nicht so viel Sinn, da "search_id" ein zufälliger Wert von einem der in dieser Gruppe enthaltenen Datensätze ist. Außer dir ist wirklich egal welchen du haben willst.

    Gunter
     
    Gunter_S, 29.01.2006
Die Seite wird geladen...
Ähnliche Themen - GROUP nach Gruppengröße
  1. leo-magic
    Antworten:
    0
    Aufrufe:
    752
    leo-magic
    28.12.2012
  2. WolfgangK
    Antworten:
    2
    Aufrufe:
    670
    WolfgangK
    31.07.2012
  3. wakethedead
    Antworten:
    0
    Aufrufe:
    1.028
    wakethedead
    11.06.2012
  4. StephanSch
    Antworten:
    5
    Aufrufe:
    1.878
  5. ulfilas
    Antworten:
    1
    Aufrufe:
    520
    ulfilas
    16.12.2005