[MySQL] Einträge unter GROUP BY sortieren?

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

  • [MySQL] Einträge unter GROUP BY sortieren?

    Hallo zusammen,

    ich hänge schon eine ganze Weile an folgendem Problem, und hoffe ihr könnt mir vielleicht weiterhelfen.

    Ich habe folgende Situation:

    Diese Tabelle ist zwar Sinnentfremded aber enstprich technisch dem gleichen Problem:

    Code:
    Tabelle Artikel:
    [B]id	item	sort	name[/B]
    1	1	1	Bleistift 
    2	1	2	Kugelschreiber 
    3	2	2	roter folienstift 
    4	2	0	blauer folienstift 
    5	2	1	güner folienstift
    Jeder artikel ist einem item zugeordnet, und besitzt eine Anzeigeposition (sort) innerhalb das items.


    Ich möchte mir nun alle Items anzeigen lassen (GROUP BY item), mit dem Namen des ersten (sort) Artikels.

    Meine Idee war nun:

    Code:
    SELECT * 
    FROM test
    GROUP BY item
    ORDER BY sort
    Code:
    Ergebniss:
    [B]id	item	sort	name[/B]
    1	1	1	Bleistift 
    3	2	2	roter folienstift
    Das Ergebniss war natürlich gewünscht. Was aber logisch ist, da mysql zuerst gruppieret (GROUP BY) before es sortiert (ORDER BY).

    Meine gewünschte Ausgabe wäre:
    Code:
    [B]id	item	sort	name[/B]
    1	1	1	Bleistift 
    4	2	0	blauer folienstift
    .. da ich immer nur den ersten nach dem Feld "sort" sortierten Artikel sehen möchte.


    Ich hoffe jemand hat eine Lösung oder noch einen Denkanstoss für mich.

    In meiner reellen Situation habe ich noch einige JOINS mit in der Abfrage, vielleicht gibts es darüber eine Lösung.

    Einen ähnlichen Beitrag habe ich gefunden (http://www.php-resource.de/forum/sho...light=group+by) wesen Ansatz und Lösung aber, denke ich, nicht ganz entspricht.

    Vielen Dank
    smonkey
    Zuletzt geändert von smonkey; 22.02.2005, 17:39.

  • #2
    Du weisst schon dass man nach allen single cols gruppieren sollte da sonst das Ergebnis nicht korrekt sein kann.
    MySQL erlaubt das zwar, andere DB Systeme verweigern dies allerdings.
    Das Gruppieren ist eigentlich für aggregatsfunktionen gedacht. In Deiner Abfrage sehe ich keine.
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      evt langt in deinem fall schon die aggregatsfunktion MIN()
      Beantworte nie Threads mit mehr als 15 followups...
      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

      Kommentar


      • #4
        Hallo MelloPie,

        erstmal Danke für deine Antwort. Ich denke eher Aggregatsfunktionen sind ein Feature von GROUP BY, aber nicht die ausschliessliche Verwendung(?).

        Wie dem auch sei, siehst du denn eine andere Möglichkeit, die Ausgabe auf eine Zeile pro 'item' zu beschränken? Möglicherweise über einen JOIN?


        Da kommt mir auch schon die Lösung. War ein guter Denkanstoss mit dem MIN(). Bin daran aber immer gescheitert, weil dieser alleine würde ja nur den niedriegsten Wert ausgeben. Nicht aber den Datensatz mit dem niedriegsten Wert.

        Meine Lösung funnktioniert nun aber über HAVING:

        Code:
        SELECT * 
        FROM test
        GROUP BY item
        [COLOR=blue]HAVING sort=MIN(sort)[/COLOR] 
        ORDER BY sort
        Danke
        smonkey
        Zuletzt geändert von smonkey; 23.02.2005, 07:01.

        Kommentar


        • #5
          Zu früh gefreut ...

          HAVING wird ja auch erst nach GROUP BY angezeigt, also kriege ich nicht alle Datensätze.


          Gibt es die Möglichkeit mit Aggregatsfunktionen in ON-Klauseln eines JOINS zu arbeiten?

          Kommentar

          Lädt...
          X