Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Potrójny LEFT JOIN w 3 tabelach
Adym
post 16.12.2020, 11:52:18
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 16.12.2020

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


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

Ten post edytował Adym 16.12.2020, 11:53:02
Go to the top of the page
+Quote Post
nospor
post 16.12.2020, 17:17:27
Post #2





Grupa: Moderatorzy
Postów: 36 449
Pomógł: 6292
Dołączył: 27.12.2004




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...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Adym
post 16.12.2020, 21:53:05
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 16.12.2020

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


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
Go to the top of the page
+Quote Post
Tomplus
post 16.12.2020, 23:29:01
Post #4





Grupa: Zarejestrowani
Postów: 1 835
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

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


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

Go to the top of the page
+Quote Post
trueblue
post 17.12.2020, 08:31:03
Post #5





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

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


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.


--------------------
Go to the top of the page
+Quote Post
Adym
post 17.12.2020, 08:52:40
Post #6





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 16.12.2020

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


Dziękuję Panowie za pomoc, dzisiaj wprowadzę poprawki.
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: 23.04.2024 - 11:13