Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ MySQL _ użycie LEFT JOIN z SELECT

Napisany przez: Jdwind 17.01.2021, 12:41:03

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 http://forum.php.pl/Potrojny_LEFT_JOIN_w_3_tabelach_t268889.html 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

Napisany przez: trueblue 17.01.2021, 13:01:36

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.

Napisany przez: Jdwind 17.01.2021, 13:25:03

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?

Napisany przez: trueblue 17.01.2021, 13:29:09

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

A potem użyj aliasów w zapytaniu.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)