Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Błąd w zapytaniu MySQL - podpowiedz potrzebna
phpamator
post 22.03.2020, 22:19:32
Post #1





Grupa: Zarejestrowani
Postów: 321
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

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


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ć?
Go to the top of the page
+Quote Post
trueblue
post 22.03.2020, 22:36:16
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


A kiedy będziesz grupował, to co z kolumnami adr_Id, ck_IdKhnt, ckh_Nazwa?


--------------------
Go to the top of the page
+Quote Post
phpamator
post 22.03.2020, 22:57:51
Post #3





Grupa: Zarejestrowani
Postów: 321
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

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


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 ?

Ten post edytował phpamator 22.03.2020, 23:19:59
Go to the top of the page
+Quote Post
trueblue
post 23.03.2020, 07:07:39
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


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?


--------------------
Go to the top of the page
+Quote Post
phpamator
post 23.03.2020, 09:23:25
Post #5





Grupa: Zarejestrowani
Postów: 321
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

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


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
Go to the top of the page
+Quote Post
trueblue
post 23.03.2020, 12:26:35
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


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.


--------------------
Go to the top of the page
+Quote Post
phpamator
post 23.03.2020, 17:18:15
Post #7





Grupa: Zarejestrowani
Postów: 321
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

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


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



Go to the top of the page
+Quote Post
trueblue
post 23.03.2020, 17:49:29
Post #8





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


A jak chcesz aby wyglądał wynik dla konkretnej firmy i kilku różnych cech?


--------------------
Go to the top of the page
+Quote Post
phpamator
post 23.03.2020, 18:20:13
Post #9





Grupa: Zarejestrowani
Postów: 321
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

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


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 ...

Ten post edytował phpamator 23.03.2020, 18:21:27
Go to the top of the page
+Quote Post
viking
post 23.03.2020, 18:25:52
Post #10





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


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

http://sqlfiddle.com/#!9/88651c/1

Ten post edytował viking 24.03.2020, 07:02:26


--------------------
Go to the top of the page
+Quote Post
phpamator
post 24.03.2020, 10:09:25
Post #11





Grupa: Zarejestrowani
Postów: 321
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

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


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.
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: 28.03.2024 - 14:17