Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapytanie sql z distinct
tomzoll
post 21.05.2013, 09:53:59
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 19.09.2011

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


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


Go to the top of the page
+Quote Post
alegorn
post 21.05.2013, 11:06:05
Post #2





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

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


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.
Go to the top of the page
+Quote Post
tomzoll
post 22.05.2013, 10:00:27
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 19.09.2011

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


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


Go to the top of the page
+Quote Post
mmmmmmm
post 22.05.2013, 10:23:57
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


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

Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 13.07.2025 - 12:25