Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> użycie LEFT JOIN z SELECT, left join z subzapytaniem
Jdwind
post 17.01.2021, 12:41:03
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 21.12.2007
Skąd: Stalowa Wola

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


Witam, czy jest możliwe wyciągnięcie jednym zapytaniem dwóch danych z tej samej tabeli? W jednej tabeli mam pola kto zmodyfikował i kto dodał pozycję, które często różnią się od siebie - pola te, to id użytkowników z drugiej tabeli. I teraz próbuję wyświetlić nazwy tych użytkowników z tabeli, mając id tych użytkowników w drugiej tabeli.
  1. SELECT r.id, r.pole_1, r.pole_2, r.pole_3, r.login_id, r.modyfik_id, l.login_name
  2. FROM rejestr AS r
  3. LEFT JOIN login AS l ON r.login_id=l.lid
  4. WHERE r.rid=1

i to mi działa, ale pokazuje tylko nazwę użytkownika na podstawie r.login_id, a potrzebuję jeszcze pobrać z bazy użytkowników nazwę użytkownika na podstawie r.modyfik_id. Próbowałem połączyć LEFT JOIN z SELECT, ale nie umiem. Próbuję tak:
  1. SELECT r.id, r.pole_1, r.pole_2, r.pole_3, r.login_id, r.modyfik_id, l.login_name
  2. FROM rejestr AS r
  3. LEFT JOIN login AS l (SELECT l.login_name AS namemod FROM login WHERE l.lid = r.modyfik_id) ON r.login_id=l.lid
  4. WHERE r.rid=1

Można to zrobić jednym zapytaniem, czy muszę wyciągać tą wartość w drugim?
EDIT:
nie wiem, czy to dobre rozwiązanie, ale kilka postów poniżej znalazłem ten Temat: Potrojny LEFT JOIN w 3 tabelach post, w którym Nospor zasugerował użycie kolejnego LEFT JOIN, spróbowałem to zrobić u siebie i zadziałało, drugi LEFT JOIN pokazuje mi nazwę osoby modyfikującej, tylko czy to poprawne rozwiązanie?
  1. LEFT JOIN login AS ll ON r.modyfik_id=ll.lid


Ten post edytował Jdwind 17.01.2021, 12:52:16
Go to the top of the page
+Quote Post
trueblue
post 17.01.2021, 13:01:36
Post #2





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

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


Prawdopodobnie dobrze, ale pokaż ostateczne zapytanie.

LEFT JOIN nie musisz używać, jeśli masz pewność, że w tabeli rejestr są użytkownicy, którzy są również w tabeli login, albo nie interesują Cię wpisy w rejestr, dla których brak odpowiadających im użytkowników.


--------------------
Go to the top of the page
+Quote Post
Jdwind
post 17.01.2021, 13:25:03
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 21.12.2007
Skąd: Stalowa Wola

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


Całość wygląda teraz tak:
  1. SELECT r.id, r.pole_1, r.pole_2, r.pole_3, r.login_id, r.modyfik_id, l.login_name, ll.login_name
  2. FROM rejestr AS r
  3. LEFT JOIN login AS l ON r.login_id=l.lid
  4. LEFT JOIN login AS ll ON r.modyfik_id=ll.lid
  5. WHERE r.rid=1

Tylko teraz mam pytanie - jak próbuję wyciągnąć dane w php w ten sposób:
  1. while($row = $rezult3->fetch_array())

i chcę użyć $row["ll.login_name"] to mam undefined index. Zapytanie w phpmyadmin zwraca poprawne dane.
EDIT:
przepraszam, chwilowe zaćmienie - użyłem aliasów i jest w porządku. Tylko moje pytanie o poprawność użycia drugiego LEFT JOIN - czy to jest ok (wiem, że działa) czy może lepiej próbować tego SELECTa w pierwszym LEFT JOIN?

Ten post edytował Jdwind 17.01.2021, 13:29:57
Go to the top of the page
+Quote Post
trueblue
post 17.01.2021, 13:29:09
Post #4





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

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


Sprawdź jak wygląda cała tablica $row, będziesz wiedział dlaczego.

A potem użyj aliasów w zapytaniu.


--------------------
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 - 18:07