Jul 03

[MySQL] Grupowanie i sortowanie wyników

Tag: MySQL, Programowanieradmen @ 09:07

Swego czasu miałem spory problem z rozwiązaniem problemu wyciągnięcia danych grupując i sortując jednocześnie.

Cały problem polegał na tym, że chciałem wyciągnąć najnowszego newsa z konkretnej grupy. Robiłem to mniej więcej tak:

Niestety wynik bywał opłakany, bo wyciągane były zazwyczaj newsy pierwsze z brzegu. Dlaczego? Otóż przed ORDERem następuje grupowanie. MySQL w tej sytuacji nie patrzy na to czy ma jakoś posortować dane, tylko najpierw grupuje, a potem coś tam próbuje posortować :)

Żeby rozwiązać ten palący problem spędziłem trochę czasu na poszukiwaniach w Sieci. Widziałem jakieś INNER JOINy z JOINami i innymi cudami. Rozwiązanie, które pokażę (a znalazłem przypadkiem :)) wykorzystuje podzapytanie. Całość wydaje się zgrabna i czytelna, chociaż przyznam, że nie sprawdzałem pod kątem wydajności.

6 Responses to “[MySQL] Grupowanie i sortowanie wyników”

  1. eRIZ says:

    A zobacz, co Ci pokaże EXPLAIN po pierwszym, a co po drugim zapytaniu. [;

  2. andrzej wawrzyniak says:

    pod wzgledem wydajnosci to napewno nie jest dobrze

  3. Esiek says:

    Fajnie ale mi wywala błąd
    MySQL zwrócił komunikat: Dokumentacja
    #1064 - Something is wrong in your syntax obok ‘SELECT * FROM forum_post ORDER BY id_post DESC) GROPU BY id LIMI’ w linii 1
    Ktoś pomoże?? najlepiej proszę o kontakt na Email

  4. Esiek says:

    Mma takie zapytanie SELECT * FROM (SELECT * FROM forum_post ORDER BY id_post DESC) GROPU BY id

  5. cudny says:

    A jak wlepić podzapytanie dla takiego czegoś - bo nic mi nie działa:
    select distinct(id), sum(ilosc) from zamowienia group by id
    Ja to po prostu posortowałem w php zapisując do tablic wielowymiarowych poprzez multisort();
    Nie ma chyba innego rozwiązania.
    Pzdr

  6. Albhert says:

    SELECT *
    FROM news
    WHERE date_publication = ALL(SELECT MAX(date_publication) FROM news GROUP BY group_id)

Leave a Reply