phpamator
22.03.2020, 22:19:32
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
22.03.2020, 22:36:16
A kiedy będziesz grupował, to co z kolumnami adr_Id, ck_IdKhnt, ckh_Nazwa?
phpamator
22.03.2020, 22:57:51
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
23.03.2020, 07:07:39
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
23.03.2020, 09:23:25
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
23.03.2020, 12:26:35
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
23.03.2020, 17:18:15
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
trueblue
23.03.2020, 17:49:29
A jak chcesz aby wyglądał wynik dla konkretnej firmy i kilku różnych cech?
phpamator
23.03.2020, 18:20:13
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
23.03.2020, 18:25:52
Możesz użyć group_concat a wizualnie jak to sobie wyświetlisz to już inna sprawa.
http://sqlfiddle.com/#!9/88651c/1
phpamator
24.03.2020, 10:09:25
Wielkie dzięki Vikingu!!!
Jeszcze nie miałęm czasu się temu dokładnie przyjrzeć ale jak tylko dotre do domu to siadam i patrze

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.