GROUP BY nach Gruppengröße sortieren

Dieses Thema im Forum "Datenbanksysteme für das Web" wurde erstellt von sevY, 29.01.2006.

  1. sevY

    sevY Thread Starter Gast

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

    Gunter_S MacUser Mitglied

    Beiträge:
    150
    Zustimmungen:
    3
    MacUser seit:
    15.03.2004
    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
     
  3. sevY

    sevY Thread Starter Gast

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

    BenIrminger MacUser Mitglied

    Beiträge:
    327
    Zustimmungen:
    0
    MacUser seit:
    23.12.2004
    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
     
  5. a1ien

    a1ien MacUser Mitglied

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

    gruss a1ien
     
  6. Gunter_S

    Gunter_S MacUser Mitglied

    Beiträge:
    150
    Zustimmungen:
    3
    MacUser seit:
    15.03.2004
    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
     
  7. msslovi0

    msslovi0 MacUser Mitglied

    Beiträge:
    2.713
    Zustimmungen:
    115
    MacUser seit:
    20.03.2005
    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
     
  8. a1ien

    a1ien MacUser Mitglied

    Beiträge:
    136
    Zustimmungen:
    0
    MacUser seit:
    23.06.2003
    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!
     
  9. msslovi0

    msslovi0 MacUser Mitglied

    Beiträge:
    2.713
    Zustimmungen:
    115
    MacUser seit:
    20.03.2005
    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
     
  10. Gunter_S

    Gunter_S MacUser Mitglied

    Beiträge:
    150
    Zustimmungen:
    3
    MacUser seit:
    15.03.2004
    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
     
Die Seite wird geladen...