Dieter: Zweifaches ORDER BY?

Hallo,

ich würde gerne eine Tagcloud erstellen wie es bei del.icio.us & Co üblich ist. Dabei habe ich ein Problem: Ich möchte die 100 Begriffe abfragen, die am meisten benutzt werden - aber ich möchte nicht danach ordnen wie oft sie benutzt wurden, sondern nach Alphabet!

Bisher sieht meine Query wie folgt aus:

SELECT tag,id FROM Ttag ORDER BY (SELECT COUNT(*) FROM Ttagged WHERE Ttagged.tag = Ttag.id) DESC LIMIT 100

Diese Abfrage realisiert, dass die 100 meistbenutzten Begriffe abgerufen werden aber leider nicht das alphabetische Sortieren...

Ich würde mich über Hilfe freuen,
mfg, Dieter!

  1. Ich kenn mich jetzt nicht 100% aus aber kannst du das nicht evtl. verschachteln das er es erst nach hundert und dann diese hundert nach alphabet ordnet. Klingt für mich jetzt logisch das du ORDER BY (... ORDER By(...) ) machst

    1. Hi pad,

      Ich kenn mich jetzt nicht 100% aus aber kannst du das nicht evtl. verschachteln das er es erst nach hundert und dann diese hundert nach alphabet ordnet. Klingt für mich jetzt logisch das du ORDER BY (... ORDER By(...) ) machst

      schreibst du in jede Posting-Antwort ein, "Ich kenn mich jetzt nicht 100% aus aber ..." ? :)

      Verschachteln geht nicht direkt beim Order, aber wie wäre es mit einer in sich verschatelten Select-Query?

      SELECT * FROM (SELECT ... ) table ORDER BY table ASC

      Alekz

      1. Es war ne Vemutung aber das mit dem Verschachteln war doch schon mal nicht schlecht.

      2. Ich muss mich korregieren, wenn dann so:

        SELECT a.tags FROM (SELECT tags FROM ... ORDER BY xyz) a ORDER BY a.tags ASC

        Klappt das?

  2.   
    SELECT  
     tag,  
     id  
    FROM  
     Ttag  
    ORDER BY  
     (  
     SELECT  
      COUNT(*)  
     FROM  
      Ttagged  
     WHERE  
      (Ttagged.tag = Ttag.id)  
     )  
     DESC  
    LIMIT  
     100  
    
    

    Diese Abfrage realisiert, dass die 100 meistbenutzten Begriffe abgerufen werden aber leider nicht das alphabetische Sortieren...

    Versuch mal:

      
    SELECT  
     tag,  
     id                   -- hier eventuell irgendwo mit SUM(*) kommen  
    FROM  
     Ttag  
    JOIN  
     Ttagged ON (Ttagged.tag = Ttag.id)  
    GROUP BY  
     Ttag.id              -- ist jetzt nur ein Beispiel für die vollqualifizierte Schreibweise des Datenfelds  
    LIMIT  
     0,  
     100  
    
    

    Immer auch mal hier schauen:
    http://dev.mysql.com/doc/refman/5.1/de/index.html
    http://dev.mysql.com/doc/refman/5.1/de/select.html

  3. yo,

    Diese Abfrage realisiert, dass die 100 meistbenutzten Begriffe abgerufen werden aber leider nicht das alphabetische Sortieren...

    die frage ist, nach welcher spalte du den alphabetisch sortieren willst. kommt die spalte nämlich in der tabelle Ttag vor, kannst su einfach mit im order by mit angeben.

    SELECT tag,id
    FROM Ttag
    ORDER BY (SELECT COUNT(*) FROM Ttagged WHERE Ttagged.tag = Ttag.id) DESC,
    spalten_name_alphabetisch
    LIMIT 100

    Ilja