![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 681 Pomógł: 28 Dołączył: 14.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
zachodzę sobie w głowę jak powinno wyglądać dobrze napisane zapytanie do mysqla:
Są dwie tabele w których jest to samo ID, chce wyświetlić wszystkie rekordy , ale jeśli w drugiej tabeli jest to samo ID wyświetli się coś extra (np podświetlę , pogrubie sobie etc).
wyświetli nam tylko te gdzie relacja pomiędzy niby jest spójna. Natural Join też odpada. Dla samego połączenia tabel wystarczy:
a jak bym chciał w miejsce gwiazdki zrobić alias As podswietlenie ? Czyżby tak:
Ten post edytował casperii 11.06.2017, 19:06:26 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
LEFT JOIN
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 681 Pomógł: 28 Dołączył: 14.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
No dobra ale jest jedno ale:
Jeżeli mam w tabeli2 2 x wartość tą samą aid którą porównuje sobie z tabela 1 to mi się nazwy z tabeli1 dublują , jak to ugryźć group by aid ? tabela1: id, produkt 1 | Auto tabela2: id, adres, rodzaj 1 | www | B 1 | ww2 | C i dla rekordu ID 1 powinno mi pokazać Auto <a href="www">B</a> <a href="ww2">C</a> jak zrobię tak:
to wyświetli mi Auto B , chociaż jest jeszcze C jak zrobię tak:
to wyświetli mi Auto B Auto C a moim założeniem jest wyświetlenie Auto B C Ten post edytował casperii 11.06.2017, 21:06:20 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Jesli uzywasz grupowania i chcesz w select pobrac zagregowane dane, to wypadaloby uzyc jakiejs funkcji do tego, w zaleznosci od potrzeb. W twoim przypadku masz uzyc 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 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 681 Pomógł: 28 Dołączył: 14.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
@nospor :
powyższe pokaże mi Auto, A, C - jest idealnie, ale jest problem jeśli w bazie są jeszcze inne , ponieważ pobiera mi tylko 1 rekord. 1 | Auto 2 | Rower tabela2: id, adres, rodzaj 1 | www | B 1 | ww2 | C 2 | ww2 | Z 2 | ww2 | T |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Zjadles GROUP BY... skup sie troche
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 681 Pomógł: 28 Dołączył: 14.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
@nospor ok , racja:
powyższe pokaże mi Auto, A, C Rower Z, T A co jeśli w bazie miałbym tak: 1 | Auto 2 | Rower 3 | Samolot tabela2: id, adres, rodzaj 1 | www | B 1 | ww2 | C 2 | ww2 | Z 2 | ww2 | T i chciałbym też wyświetlić, samolot chociaż nie ma powiązania w tabeli 2 ? |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Zamiast pytać o głupooty to byś to lepiej sprawdził.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 681 Pomógł: 28 Dołączył: 14.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
@Pyton_000 gdyby to działało to bym nie pytał tutaj :-)
Jeszcze raz napiszę co chcę osiągnąć: tabela1: id, produkt 1 | Auto 2 | Rower 3 | Samolot tabela2: id, adres, rodzaj 1 | www | B 1 | ww2 | C 2 | ww2 | Z 2 | ww2 | T powinno mi wyświetlić: Auto B, C Rower Z, T Samolot |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
@nospor ok , racja:
powyższe pokaże mi Auto, A, C Rower Z, T . . . i chciałbym też wyświetlić, samolot chociaż nie ma powiązania w tabeli 2 ? Ja to bym się spodziewał po wywołaniu tego zapytania błędu "Column 'id' in field list is ambiguous". Chyba masz jakieś specyficzne ustawienie środowiska, które ukrywa te błędy, skoro Ci w ogóle to zapytanie coś zwraca. @Pyton, nospor - dlaczego to zapytanie w ogóle działa? Ani SELECT ani GROUP BY w tym zapytaniu nie wiedzą po którym id mają grupować. U ciebie tak jakby domyślnie grupuje po ostatnim, czyli pomija ID z pierwszej tabeli. Daj GROUP BY tabela1.id i będzie hulało. W select'cie też sprecyzuj, o który id chodzi (tabela1 czy tabela2). |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 681 Pomógł: 28 Dołączył: 14.08.2014 Ostrzeżenie: (0%) ![]() ![]() |
@bostaf jeśli nie zauważyłeś to są przykładowe tabele by zrozumieć. By zobrazować lepiej nazwę tabele
product: pid, name 1 | Auto 2 | Rower 3 | Samolot Category: aid, adres, cat 1 | www | B 1 | ww2 | C 2 | ww2 | Z 2 | ww2 | T
powyższe zwraca mi tylko: Auto, A, C Rower Z, T a Samolot gdzie się pytam ? ![]() |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Podane przez Ciebie zapytanie na pewno nie zwróci Ci tego wyniku. Robisz GROUP_CONCAT na aid, jak również GROUP BY na aid, dodatkowo łączysz odwrotnie tabele. Pomieszanie z poplątaniem.
-------------------- |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
@bostaf jeśli nie zauważyłeś to są przykładowe tabele by zrozumieć. By zobrazować lepiej nazwę tabele Nie zauważyłem rzeczywiście ![]()
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 17.06.2017 Ostrzeżenie: (0%) ![]() ![]() |
Cześć.
Nie zakładam nowego wątku, bo wygląda mi na to, że moje pytanie jest pokrewne do tematu tego wątku. Robię aplikację webową do pracy, w której w tabeli "pacjent" jako klucze obce używam dwa razy id z innej tabeli - "personel" (jest to 2x id lekarza z tabelki "personel", bo jeden lekarz kieruje pacjenta a drugi go kwalifikuje). Na liście zabiegów mają pojawić się zamiast id lekarzy ich nazwiska. Jak zrobić SELECT, aby uzyskać nazwiska tych dwóch lekarzy?
Na tą chwilę używam inner/left join i odpowiednie klucze obce ale w ten sposób potrafię wyciągnąć tylko jednego lekarza. Ten post edytował rufuspl 17.06.2017, 13:21:54 |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
bo masz użyć 2x left join.
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 17.06.2017 Ostrzeżenie: (0%) ![]() ![]() |
bo masz użyć 2x left join. OK. Ale jak później wyświetlić wynik zapytania i te dwa nazwiska
Wykomentowałem w kodzie linijkę odpowiedzialną za wyświetlenie jednego nazwiska. Jak je rozróżnić i wyświetlić drugie nazwisko? Ten post edytował rufuspl 17.06.2017, 13:30:43 |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
dodajesz aliasy w zapytaniu w SELECT dla nazwisk
|
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 17.06.2017 Ostrzeżenie: (0%) ![]() ![]() |
dodajesz aliasy w zapytaniu w SELECT dla nazwisk Nie bardzo wiem jak a i szukanie rozwiązania nie przyniosło oczekiwanych skutków ![]() Mam na tą chwilę coś takiego
Możesz mi pokazać jak na moim kodzie lub na jakimś innym przykładzie? |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Kod SELECT tabel1.id AS ID_1, tabela2.id AS ID_2
|
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 17.06.2017 Ostrzeżenie: (0%) ![]() ![]() |
Kod SELECT tabel1.id AS ID_1, tabela2.id AS ID_2 Tyle, że ja w tabeli1 (pacjent) mam klucz (id) z tabeli2 (personel) a na stronie ma pojawić się nazwisko i imię pobrane z tabeli2 (personel) odszukane po id. I nie bardzo wiem, jak to zrobić dla drugiego lekarza, czyli jak użyć aliasu we fragmencie |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.07.2025 - 22:28 |