Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Błąd w zapytaniu MySQL - podpowiedz potrzebna
Forum PHP.pl > Forum > Bazy danych > MySQL
phpamator
Pomocyyyyyy

Dobry ...
Pomóżcie mi proszę z tym zapytaniem:

SELECT
adr_NazwaPelna, adr_Id, ck_IdKhnt, ckh_Nazwa
FROM
adr__Ewid AS e, kh_CechaKh AS k, sl_CechaKh AS c
WHERE
k.ck_IdKhnt = e.adr_Id
AND
k.ck_IdCecha = c.ckh_Id
AND adr_Id > 9
chciałbym to pogrupować po nazwie (adr_NazwaPelna) ale kiedy dopiszę do query: GROUP BY adr_NazwaPelna
wywala mi błąd:
"Column ..... is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause"

Jak to powinno wyglądać?
trueblue
A kiedy będziesz grupował, to co z kolumnami adr_Id, ck_IdKhnt, ckh_Nazwa?
phpamator
Hej trublue

No na końcu.
Co masz na myśli "to co z kolumnami adr_Id, ck_IdKhnt, ckh_Nazwa?"
one wszystkie muszą być w klauzuli GROUP BY ?
trueblue
Ano muszą.
Skoro tworzysz grupę na podstawie wybranego/ych pól, to te, które nie są w klauzuli GROUP BY muszą być poddane funkcjom agregującym.

Jeśli są rekordy:
a b c
1 x y
1 h i
1 o p
to tworząc grupę na podstawie kolumny a, jak baza ma zgrupować pozostałe wartości?
phpamator
Hej trublue,
A mógłbyś to dla rozjaśnienia sytuacji pokazać na moim query proszę ?

SELECT
adr_NazwaPelna, adr_Id, ck_IdKhnt, ckh_Nazwa
FROM
adr__Ewid AS e, kh_CechaKh AS k, sl_CechaKh AS c
WHERE
k.ck_IdKhnt = e.adr_Id
AND
k.ck_IdCecha = c.ckh_Id
AND adr_Id > 9
trueblue
Musisz pogrupować po wszystkich polach w takim przypadku.
Ale pewnie kiedy to zrobisz to stwierdzisz, że nie takiego wyniku oczekiwałeś.

Problemem nie jest zapytanie, ale błąd logiczny. Grupowanie polega na łączeniu w grupy na podstawie tych samych wartości w kolumnach.
Jeśli będą dwa rekordy o takiej samej wartości adr_NazwaPelna, ale różnych ck_IdKhnt, ckh_Nazwa, to nie utworzy się jeden rekord.
phpamator
Znaczy widzisz blad logiczny w samej konstrukcji zapytania ?
De'facto potrzebuje tylko Nazwy i przypisanych cech których moze by wiecej niz jedna
pozostae pola to tylko kwestia pokazania czy sie zgadzaja id wiec mozna je pominac.

Majac do dyspozycji 3 tabele w ktorych mamy:
- tabela 1 -> nazwa firmy
- tabela 2 -> id firmy i id cechy
- tabela 3 -> id cechy oraz nazwa cechy
Jak skonstruowal bys zapytanie zeby nie bylo bledu logicznego i dalo sie pogrupowac questionmark.gif



trueblue
A jak chcesz aby wyglądał wynik dla konkretnej firmy i kilku różnych cech?
phpamator
W zasadzie jak mogo by to wygladac ...
kolumna 1 nazwafirmy kolumna lista cech lub kilka wierszy ponizej z kolejnymi cechami po czym kolejna firma i jej cechy
firma1 cecha1
cecha2
firma 2 cecha1
cecha2

jesli o to pytasz ...
viking
Możesz użyć group_concat a wizualnie jak to sobie wyświetlisz to już inna sprawa.

http://sqlfiddle.com/#!9/88651c/1
phpamator
Wielkie dzięki Vikingu!!!

Jeszcze nie miałęm czasu się temu dokładnie przyjrzeć ale jak tylko dotre do domu to siadam i patrze tongue.gif

Serdeczne dzięki.
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-2024 Invision Power Services, Inc.