Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak połączyć distinct, group by i desc?
Elektryk
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 24.07.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Witam.
Mam pewną zagwozdkę i szukam pomocy.
Chodzi o to, że mam w tabeli kolumny section, opinion i vote i chcę wyciągnąć 5 ostatnich głosów dla różnych sekcji. No więc robię to tak:

Kod
SELECT distinct section, vote, opinion FROM tabela GROUP BY section


Dzięki takiemu zapytaniu otrzymuję dokładnie jeden rekord dla każdego osobnego section. Problem polega jednak na tym, że zwracane vote i opinion należą do pierwszego rekordu z danym section w tabeli. A ja potrzebuję ostatni. Niestety dopisanie desc nie pomaga gdyż z tego co wywnioskowałem desc oddziaływuje na scalony wynik a nie na wszystkie rekordy w tabeli.

Czy ktoś mógłby mi podpowiedzieć jak napisać to zapytanie by działało tak jak ja chcę?

Ten post edytował Elektryk 1.05.2011, 13:50:35
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
yarek12
post
Post #2





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 5.08.2010

Ostrzeżenie: (10%)
X----


z twojego postu wynika, że nie masz w tej tabeli kolumny ID a jest ona niezbędna do takiego zapytania, bowiem wyznacza ona kolejność dodawania rekordów.
jeśli więc nie masz takiej kolumny to utwórz ją używając INT (11), auto_increment

  1. ORDER BY id DESC LIMIT 0,5


jak już masz kolumnę id to dopisz to na końcu swojego zapytania i po problemie.

Ten post edytował yarek12 1.05.2011, 16:05:36
Go to the top of the page
+Quote Post
Elektryk
post
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 24.07.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Mój błąd, faktycznie nie napisałem o tym. Ale mam tam kolumnę id ustawioną jako klucz główny a także parę innych kolumn będących kluczami obcymi jak user czy item. I próbowałem już metody z sortowaniem ale niestety to nie działa tak jak powinno ponieważ sortowanie jest wykonywane na pogrupowanych wynikach.

Przykład:
Głosowano kolejno tak:
Cena: 2
Wykonanie: 4
Cena: 6
Wykonanie: 8

I teraz chcę sprawdzić jakie były ostatnie oceny dla Ceny i Wykonania. Powinienem więc otrzymać odpowiednio 6 i 8.
Po użyciu zaś sort by id desc otrzymam wynik 4 i 2 gdyż baza danych najpierw powybiera oceny unikalnych cech (2 i 4) a potem dopiero to posortuje odwrotnie względem id.

Póki co nie widzę szans by rozwiązać to inaczej niż poprzez funkcję w php lub procedurę w bazie (przy czym wolałbym tego drugiego uniknąć).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 17:51