[MySQL][PHP]JOIN + GROUP_CONCAT błedne działanie |
[MySQL][PHP]JOIN + GROUP_CONCAT błedne działanie |
15.01.2020, 12:20:54
Post
#1
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 0 Dołączył: 16.08.2017 Ostrzeżenie: (0%) |
Witam posiadam bazę danych w której są 3 tabele. Jedna tabela o nazwie persons zawiera dane personalne czyli id i name. Druga tabela o nazwie domains , a trzecia tabela o nazwie e-mail. Tabele połączone są relacjami i poniższe zapytanie działa, jednak chciałbym aby adresy e-mail grupowane były względem danej domeny, natomiast w przypadku kiedy dany użytkownik posiada jedną domenę i 4 adresy e-mail w danej domenie to poniższe zapytanie czterokrotnie wyświetli imię użytkownika i nazwę domeny, a chciałbym aby imię użytkownika, nazwa domeny wyświetla się tylko raz, a adresy e-mail żeby były pogrupowane względem tej domeny.
Ten post edytował inomi13 15.01.2020, 12:26:23 |
|
|
15.01.2020, 12:31:14
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 782 Pomógł: 1826 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
A gdzie użyłeś GROUP_CONCAT i uważasz, że jego działanie jest błędne?
-------------------- |
|
|
15.01.2020, 12:35:59
Post
#3
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 0 Dołączył: 16.08.2017 Ostrzeżenie: (0%) |
użyłem tego zapytania, ale wtedy grupuje mi wszystkie adresy e-mail w jednym wierszu
|
|
|
15.01.2020, 12:49:36
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 782 Pomógł: 1826 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Zapoznaj się z manualem: https://dev.mysql.com/doc/refman/5.7/en/gro...on_group-concat
Z zasadą stosowania tej funkcji i innych grupujących. -------------------- |
|
|
15.01.2020, 13:01:54
Post
#5
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 0 Dołączył: 16.08.2017 Ostrzeżenie: (0%) |
Zapoznaj się z manualem: https://dev.mysql.com/doc/refman/5.7/en/gro...on_group-concat Z zasadą stosowania tej funkcji i innych grupujących. Korzystałem z tej strony, jednak nie doszedłem do jakiegoś sensownego rozwiązania. Może ktoś coś doradzi |
|
|
15.01.2020, 13:05:16
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6307 Dołączył: 27.12.2004 |
Nie doszedles do sensowego rozwiazania bo zapomniales powiedziec po czym grupujesz.... GROUP BY co
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
21.01.2020, 12:13:01
Post
#7
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 0 Dołączył: 16.08.2017 Ostrzeżenie: (0%) |
Witam ponownie mam problem z group_concat ponieważ dołożyłem kolejną tabelę "email " i spoiłem ze sobą trzy tabele, jednak ożywając poniższego zapytania dostaje na wyjściu zdublowany wiersz z nazwą domeny. Drugi problem że poniższe zapytanie nie zwróci nazwy domeny która nie posiada adresu email. Proszę o sugestie jak rozwiązać mój problem.
Ten post edytował inomi13 21.01.2020, 12:13:22 |
|
|
21.01.2020, 12:19:45
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6307 Dołączył: 27.12.2004 |
drugi problem: poczytaj o roznicach miedzy JOIN, LEFT JOIN, RIGHT JOIN i nie uzywaj ich w sposob losowy jak to teraz ma miejsce. Dla persons dajesz LEFT JOIN, dla emails JOIN. Dlaczego?
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
21.01.2020, 12:40:34
Post
#9
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 0 Dołączył: 16.08.2017 Ostrzeżenie: (0%) |
join left używam dla persons ponieważ chce do tabeli persons dołączyć elementy z prawej strony czyli z tabeli "domains"
Na szybko używając poniższego zapytania dostaje taki rezultat, a chciałbym aby wiersz onet.pl się nie powtarzał. Nie chce użyć Distinct ponieważ w innych kolumnach będzie data ważności domen które mogą być takie same. Ten post edytował inomi13 21.01.2020, 12:43:09 |
|
|
21.01.2020, 14:51:36
Post
#10
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6307 Dołączył: 27.12.2004 |
Skoro lecisz i grupujesz po domenach, to czemu dajesz GROUP_CONTACT po domenie ? To nie ma najmniejszego sensu teraz
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
21.01.2020, 15:14:30
Post
#11
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 0 Dołączył: 16.08.2017 Ostrzeżenie: (0%) |
grupując względem id domeny i tak dostaje zdublowane rekordy
|
|
|
21.01.2020, 15:19:12
Post
#12
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6307 Dołączył: 27.12.2004 |
Ale nadal robisz group_concat po domenie. Toz powiedzialem ze to bez sensu....
Nie group_concat(d.domain_name) a poprostu d.domain_name -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.01.2020, 08:33:40
Post
#13
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 0 Dołączył: 16.08.2017 Ostrzeżenie: (0%) |
Grupując względem d.domain_name było by ok, gdyby nie fakt że mam jeszcze jedną tabelę "persons" więc finalnie chcę mieć wszystko grupowane względem p.id. Zastawiam się czy jestem wstanie do obrobić w jednym zapytaniu. Chyba trochę na mieszałem w tym temacie więc opiszę to jeszcze raz ale dokładniej.
Mam 3 tabele "Persons" "Domain" "email". Tabele są ze sobą połączone "Persons"- > id_persons "Domain" "Domain"-> id.domain"email". Potrzebuje zrobić zapytanie które wypisze mi osobę która posiada jakieś domeny oraz przypisane do nich adresy e-mail. W bazie danych zdarza się że jakaś domena nie posiada adresów email. Stworzyłem poniższe zapytanie który dubluje mi nazwy domen oraz nie wypisuje domen które nie posiadając przypisanego adresu e-mail.
|
|
|
22.01.2020, 10:25:04
Post
#14
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6307 Dołączył: 27.12.2004 |
Skoro masz dwa maile przypisane do jednej domeny, to tak bedziesz wlasnie mial jak masz. To po pierwsze
po drugie: mowilem ci: wywal te JOIN... wstaw LEFT JOIN. Jestes oporny na wiedze. I jak chcesz sie bawic w te GROUP_CONCAT, to potem w php wywal sobie te duplikacje i juz. A ja osobiscie nie robie zadnego grupowania w takich przypadkach jak ten, tylko potem ladnie w php obrabiam sobie wyniki i mam jak chce. Ale co kto lubi edit: ewentualnie rozszerz grupowanie jeszcze na domene GROUP BY p.id, d.id -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
Wersja Lo-Fi | Aktualny czas: 20.09.2024 - 21:05 |