Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie sql z distinct
tomzoll
post
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
 
Start new topic
Odpowiedzi (1 - 3)
alegorn
post
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 (IMG:style_emoticons/default/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
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... (IMG:style_emoticons/default/smile.gif)

Ale, żeby nie było offtop, kontynuuję(IMG:style_emoticons/default/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...(IMG:style_emoticons/default/sad.gif)


Go to the top of the page
+Quote Post
mmmmmmm
post
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 19:37