[MySQL]problem z zapytaniem z dwóch tabel |
[MySQL]problem z zapytaniem z dwóch tabel |
16.10.2019, 09:30:47
Post
#1
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 26.07.2019 Ostrzeżenie: (0%) |
Mam problem z zapytaniem, ponieważ mam dwie tabele. Jedna tabela to "persons" druga "domains". Chcę wyświetlić użytkownika który ma np. dwie domeny lub więcej domen. więc stworzyłem dodatkową kolumnę "next_staff_id_person". Zapytanie działa ale tylko i wyłącznie jeżeli dana osoba ma max dwie domeny, jednak nie działa to jeżeli ktoś ma 3 lub więcej domen.
|
|
|
16.10.2019, 09:34:10
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
https://www.db-fiddle.com
Wrzuć przykładową strukturę. -------------------- |
|
|
16.10.2019, 09:53:48
Post
#3
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 20 Dołączył: 19.02.2010 Ostrzeżenie: (0%) |
miałem błąd powinno być:
Może nie jest to zoptymalizowane ale jeśli działa to czemu nie robić w ten sposób? heh Ten post edytował poli25 16.10.2019, 10:41:10 |
|
|
16.10.2019, 10:01:48
Post
#4
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 26.07.2019 Ostrzeżenie: (0%) |
Zapytanie SQL: Dokumentacja SELECT p.name, (SELECT count(d.domain_name) FROM domains d WHERE d.next_staff_id_person=p.id) FROM domains d WHERE (SELECT count(d.domain_name) FROM domains d WHERE d.next_staff_id_person=p.id)>=2 LIMIT 0, 25 MySQL zwrócił komunikat: Dokumentacja #1054 - Nieznana kolumna 'p.name' w field list |
|
|
16.10.2019, 10:07:53
Post
#5
|
|
Grupa: Moderatorzy Postów: 36 446 Pomógł: 6292 Dołączył: 27.12.2004 |
Zapytanie poli jest zdziebka bez sensu.
Rowniez twoj pomysl z dodatkowa kolumna next_staff_id_person jest bezsensu. To sie robi przez zwykly LEFT JOIN, GROUP BY oraz HAVING having count() >= 2 - w celu ustalenia warunku na dwie domeny lub wiecej -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
16.10.2019, 10:20:10
Post
#6
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 26.07.2019 Ostrzeżenie: (0%) |
Może źle się wyraziłem. Chcę osiągnąć taki efekt jak na zdjęciu tzn. aby "name" wyświetlało jeden rekord z imieniem i nazwiskiem do którego przypisane jest kilka domen
|
|
|
16.10.2019, 10:59:21
Post
#7
|
|
Grupa: Moderatorzy Postów: 36 446 Pomógł: 6292 Dołączył: 27.12.2004 |
Nom, dokladnie to zrozumialem i dokladnie na to udzielilem odpowiedzi
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
16.10.2019, 11:14:39
Post
#8
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 26.07.2019 Ostrzeżenie: (0%) |
Nom, dokladnie to zrozumialem i dokladnie na to udzielilem odpowiedzi zrobiłem zapytanie jednak wyświetlają mi się dwa rekordy z imieniem.
|
|
|
16.10.2019, 11:16:58
Post
#9
|
|
Grupa: Moderatorzy Postów: 36 446 Pomógł: 6292 Dołączył: 27.12.2004 |
No bo zle grupujesz. Masz grupac po tym co chcesz miec jedno, czyli osobe. A liczyc masz domeny a nie osoby
No i chciales miec dwie domeny lub wiecej wiec nei >=1 a >=2 -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
16.10.2019, 11:19:27
Post
#10
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 26.07.2019 Ostrzeżenie: (0%) |
No bo zle grupujesz. Masz grupac po tym co chcesz miec jedno, czyli osobe. A liczyc masz domeny a nie osoby No i chciales miec dwie domeny lub wiecej wiec nei >=1 a >=2 Poprawiłem zapytanie jednak zwraca wynik jednej domeny
Ten post edytował ufo1990 16.10.2019, 11:35:22 |
|
|
16.10.2019, 11:44:25
Post
#11
|
|
Grupa: Moderatorzy Postów: 36 446 Pomógł: 6292 Dołączył: 27.12.2004 |
Ok, ale skoro interesuja cie osoby, to FROM ma byc po OSOBACH a LEFT JOIN po domenach. w przeciwnym wypadku dupa
No i grupuj i zliczaj po ID a nie po NAME -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
16.10.2019, 11:49:43
Post
#12
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 26.07.2019 Ostrzeżenie: (0%) |
W tabeli "domains" mam trzy domeny które mają taki sam "p.id" jednak poniższe zapytanie zwraca tylko jeden rekord z domeną
|
|
|
16.10.2019, 11:52:18
Post
#13
|
|
Grupa: Moderatorzy Postów: 36 446 Pomógł: 6292 Dołączył: 27.12.2004 |
No i prawidlowo. Jedna osoba jest przypisana do 3 domen wiec dostaniesz ta jedna osobe. W czym problem? Jesli zas chcesz widziec te wszystkie domeny na liscie to musisz polaczyc te domeny ze soba w SELECT
SELECT p.name, GROUP_CONCAT(d.domain_name) FROM czy jakos tak. nie pamietam dokladnie skladni group concat -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
16.10.2019, 11:59:36
Post
#14
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 26.07.2019 Ostrzeżenie: (0%) |
no właśnie i tu jest problem. Bo chciałbym aby wyświetlał się jeden rekord z imieniem i nazwiskiem i tyle rekordów domen ile jest przypisanych do tej osoby.
|
|
|
16.10.2019, 12:06:03
Post
#15
|
|
Grupa: Moderatorzy Postów: 36 446 Pomógł: 6292 Dołączył: 27.12.2004 |
No ale czemu to takie wazne? Poza tym w samym mysql i tak nie osiagniesz tego, ze ci wyswietli jeden rekord osoby a reszte domen. Takie rzeczy w php obrobisz. Co najwyzej jestes w stanie osiagnac ze ci wyswietli tyle rekordow ile domen a w kazdym rekodzie bedzie i osoba i domena. Tylko co to zmieni w porownaniu do powyzszego rozwiazania? No nic
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
16.10.2019, 12:16:50
Post
#16
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 26.07.2019 Ostrzeżenie: (0%) |
potrzebuje tego do statystyk, tak abym miał imię i nazwisko danej osoby i przypisane do tej osoby domeny
|
|
|
16.10.2019, 13:21:58
Post
#17
|
|
Grupa: Moderatorzy Postów: 36 446 Pomógł: 6292 Dołączył: 27.12.2004 |
No dobrze, ale te statystyki wyswietlasz gdzie? Bezposrednio w bazie czy na stronie? Bo jak na stronie to bez problemu obrobisz to w php by wyswietlalo w formacie jaki chcesz. A jak bezposrednio w bazie patrzysz to daj w group concat ENTER jako lacznik i bedziesz mial oddzielne wiersze jak wizualnie chcesz tak to widziec
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
16.10.2019, 14:12:37
Post
#18
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 26.07.2019 Ostrzeżenie: (0%) |
statystki wyświetlam bezpośrednio na stronie, jednak nie wiem jak to ogarnąć aby z jednej kolumny wyświetlał się tylko jeden rekord
|
|
|
16.10.2019, 14:14:34
Post
#19
|
|
Grupa: Moderatorzy Postów: 36 446 Pomógł: 6292 Dołączył: 27.12.2004 |
Czyli rozumiem na stronie obslugiwanej przez php tak? Podstawy php znasz?
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
16.10.2019, 14:20:23
Post
#20
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 26.07.2019 Ostrzeżenie: (0%) |
zrobiłem pętle while żeby zaciągnąć dane z bazy, jednak nie wiem jaki dać warunek dla $row["name"] aby wyświetlił się tylko jeden rekord z imieniem i nazwiskiem
|
|
|
Wersja Lo-Fi | Aktualny czas: 18.04.2024 - 11:36 |