![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 121 Pomógł: 0 Dołączył: 3.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
mam takie zapytanie :
Z tym że jak wrzucam GROUP BY nazwa przed ORDER BY... to działa jedynie ORDER BY f.nazwa ASC. Po o.typ_osoby ASC już nie sortuje. Ta się w ogóle tak zrobić żeby orderować po kilku atrybutach i wykorzystać zarazem GROUP BY ![]() |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
A po co tutaj GROUP BY skoro nie ma żadnych funkcji agregujących?
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 121 Pomógł: 0 Dołączył: 3.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
to co mam użyć
![]() ![]() ![]() Ten post edytował kask18 14.07.2010, 22:54:14 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
DISTINCT
![]() -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 121 Pomógł: 0 Dołączył: 3.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Przecież w podanym przeze mnie zapytaniu pobieram kilka atrybutów (id_producenci, nazwa, email, typ_osoby) a nie tylko jeden a DISTINCT zwróci mi tylko są nazwe . Może sie nie precyzyjnie wyraziłem chodzi o pobranie: d_producenci, nazwa, email, typ_osoby z warunkami sortowania i żeby nazwy pojawiały sie tylko raz coś takiego jak z GROUP BY tylko na 2 sortowaniach mi nie działa.
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Cytat żeby orderować po kilku atrybutach i wykorzystać zarazem GROUP BY - nie da się w ten sposób. Nie masz wpływu na to, w jakiej kolejności są grupowane rekordy, jeśli typ_osoby jest agregowany i chcesz, by zagregowany został tylko np. typ_osoby o najwyższym IQ, to musisz użyć podzapytania lub warunków w JOIN albo zrezygnować z grupowania i poradzić sobie przy pomocy HAVING (ale to też jest skomplikowane, pewnie trzeba będzie użyć zmiennych). Jeśli interesuje Ciebie tylko konkretny rekord z JOINowanej tabeli to najlepiej tylko ten rekord pobrać od razu, na pewno będzie też szybciej i zajmie mniej pamięci.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 121 Pomógł: 0 Dołączył: 3.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
A czy istnieje możliwość aby zbudować takiego WHERE żeby dla danej nazwy jeśli istnieje typ osoby = 1 to żęby zwróciło ten rekord dla danej nazwy, jeśli nie ma 1 to żeby zwróciło jeśli jest typ osoby 0 w takiej kolejności jak opisałem. Chodzi o jakieś proste rozwiązanie ?
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Kod SELECT * FROM osoba WHERE typ_osoby IN (0,1) ORDER BY typ_osoby DESC LIMIT 1 Chciałaby dusza do nieba, ale to nic nie da. Potrzebujesz przecież listę osób ze wszystkich firm ![]() Kod SELECT
* FROM osoba CROSS JOIN ( SELECT Firmy_producenci_id_producenci, MAX(typ_osoby) AS typ_osoby FROM osoba WHERE typ_osoby IN(0,1) GROUP BY Firmy_producenci_id_producenci ) AS sq USING (Firmy_producenci_id_producenci, typ_osoby) Ten post edytował Mchl 15.07.2010, 09:29:00 |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 121 Pomógł: 0 Dołączył: 3.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Skrobłem coś takiego:
Działa tak jak chciałem, alle nie wiem czy to dobre rozwiązanie (optymalne) ? |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Mnie się nie podoba osobiście. GROUP BY bez funkcji agregujących może rzucać błędami przy pewnej konfiguracji MySQL.
http://dev.mysql.com/doc/refman/5.0/en/ser...y_full_group_by |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 12:19 |