Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Potrójny LEFT JOIN w 3 tabelach
Forum PHP.pl > Forum > Bazy danych > MySQL
Adym
Cześć,

W bazie danych mam 3 tabele:
- pierwsza przechowuje dane użytkowników (id, imię i nazwisko),
- druga dane projektu (id, nazwa),
- trzecia dane zamówienia (order_id, description, status, user_id, created, updated, updatedby_user_id, project_id)

Chciałbym na podstawie danych z trzeciej tabeli pobrać:
- nazwę projektu z drugiej tabeli (na podstawie project_id),
- imię i nazwisko osoby która stworzyła zamówienie z pierwszej tabeli (na podstawie user_id),
- imię i nazwisko osoby która zaktualizowała zamówienie również z pierwszej tabelki (na podstawie updatedby_user_id).

I z tym ostatnim mam problem. Dwa pierwsze zadania załatwiam w następujący sposób:

  1. SELECT oo.order_id, oo.description, oo.project_id, u.first_name, u.last_name, oo.STATUS, oo.created, oo.updated, oo.updatedby_user_id, op.project_description, op.project_number
  2. FROM " . $this->orderTable . " oo
  3. LEFT JOIN " . $this->projectTable . " op ON op.project_id = oo.project_id
  4. LEFT JOIN " . $this->userTable . " u ON u.id = oo.user_id


Można wykonać trzeciego left join'a? żeby pobrać imię i nazwisko osoby, która zaktualizowała zamówienie? Mam spore wątpliwości, że to co zrobiłem jest prawidłowe (mimo iż działa).

Pozdrawiam
Adam
nospor
poprostu dodaj kolejny left join

....
LEFT JOIN " . $this->userTable . " u ON u.id = oo.user_id
LEFT JOIN " . $this->userTable . " uu ON uu.id = oo.updatedby_user_id

i select dodaj kolejne uu...
Adym
dzięki za podpowiedź ale rodzi się właśnie w związku z tym kolejne pytanie:

jak mam później rozróżnić przy tworzeniu tablicy do wyświetlenia first_name i last_name osoby, która stworzyła zamówienie od osoby która je edytowała?

  1. $rows[] = ucfirst($order['first_name']) . " " . $order['last_name'];


Pozdrawiam
Adam
Tomplus
Proste:
Przecież od tego masz te aliasy:
u.last_name - nazwisko twórcy
uu.last_name - nazwisko edytora

trueblue
Powinieneś użyć aliasów, ale dla pól:

  1. u.last_name AS last_name_creator
  2. uu.last_name AS last_name_editor


będziesz miał je wtedy właśnie pod takimi indeksami w tablicy PHP.
Adym
Dziękuję Panowie za pomoc, dzisiaj wprowadzę poprawki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.