Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie sql z distinct
Forum PHP.pl > Forum > Bazy danych > MySQL
tomzoll
Cześć. Mam taki problem i nie wiem jak to obejść. Mam tabelę Obserwacje o takiej strukturze:
ID, Gatunek, Kwadrat, Kategoria, Obserwator
a w niej rekordy:
1,Ptak,AA22,C1,Marek
2,Ssak,BB22,D3,Stachu
3,Ptak,AA22,C10,Jarek
4,Płaz,AB32,H1,Maria
5,Ptak,AB44,G1,Stachu

Chcę skonstruować takie zapytanie aby mi zwróciło rekordy w takiej postaci:

2,Ssak,BB22,D3,Stachu
3,Ptak,AA22,C10,Jarek
4,Płaz,AB32,H1,Maria
5,Ptak,AB44,G1,Stachu

tj. aby gatunek był unikalny w danym kwadracie (a jednocześnie żeby była wyswietlona tylko i wyłącznie jedna najwyższe kategoria w danym kwadracie (z uwzględnieniem sortowania alfabetycznego)

Próbowałem wykonać takie zapytanie: SELECT DISTINCT Gatunek, kwadrat from Obserwacje . Wszystko niby ok. poza jednym wyjątkiem: nie wyświetla mi kolumn: ID, Kategoria oraz Obserwator

Czy ktoś mógłby mi pomóc z tym problemem ?
Z góry dziękuję i pozdrawiam


alegorn
po pierwsze poczytaj o normalizacji tabel. mysle ze gdybys zastosowal sie do tych zasad, problem zapytan bylby o wiele mniejszy.

po drugie:
  1. SELECT DISTINCT Gatunek, kwadrat FROM Obserwacje

Cytat
Wszystko niby ok. poza jednym wyjątkiem: nie wyświetla mi kolumn: ID, Kategoria oraz Obserwator


zobacz co napisales w zapytaniu, polecenie brzmi :

wyświetl unikaty zbiorów dla pól GATUNEK i KWADRAT z tabeli..
więc dlaczego się dziwisz, że nie wyświetla ci pól ID, Kategoria oraz Obserwator, skoro o nie nie prosisz....
proponuje kurs sql
popraw mnie jeśli się mylę wydaje mi sie ze nie jestes programista, i nie masz ambicji nim byc, a robisz to z potrzeby (fascynacji potrzeba wink.gif )

napisz, na ile elastyczna jest ta struktura którą posiadasz, czy można by było ingerować w nią.
jesli nie - coś wymyślimy, na tym co masz, ale nie będą to optymalne zapytania...


j.
tomzoll
Cytat
po pierwsze poczytaj o normalizacji tabel. mysle ze gdybys zastosowal sie do tych zasad, problem zapytan bylby o wiele mniejszy.


Czepiłeś się, że nie wpisałem w miejscach kwadratów, gatunków itp, że są wstawiane id pobrane z powiązanych tabel a jest wpisany zwykły tekst... Bazę mam optymalną, tylko zwyczajnie nie miałem czasem na opisywanie całej struktury tutaj na forum, bo nie o to chodzi w moim poście... smile.gif

Ale, żeby nie było offtop, kontynuujęsmile.gif

Tak, wiem, że w powyższym zapytaniu DISTINCT nie proszę o dane, które mi są potrzebne, ale poprosiłem o pomoc, jak skonstruować zapytanie aby te dane zostały zwrócone.
Dodam też, że próbowałem:

Kod
SELECT id, id_gatunku, id_kwadratu, max(id_kategorii), id_obserwatora GROUP BY id_gatunku, id_kwadratu


ale znowu zwraca mi głupoty...sad.gif


mmmmmmm
Na początek proponuję wykonać zapytanie:
  1. SELECT gatunek, kwadrat, max(id) FROM tabela GROUP BY gatunek;

Potem proponuję wykonać takie zapytanie (takie samo):
  1. SET @@session.sql_mode='ONLY_FULL_GROUP_BY';
  2. SELECT gatunek, kwadrat, max(id) FROM tabela GROUP BY gatunek;

Potem proponuję sięgnąć po jakiś podręcznik (porządny) do ANSI SQL (broń Boże do MySQL!) i nauczyć się porządnie SQL.
A rozwiązanie Twego problemu to:
  1. SELECT t.* FROM tabela t NATURAL JOIN (SELECT gatunek, kwadrat, max(kategoria) kategoria FROM tabela GROUP BY 1,2)x

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.