Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] LEFT OUTER JOIN - dwukrotne złączenie dla jednej tabeli
Forum PHP.pl > Forum > PHP
kiler129
Witajcie!
Mam sobie 3 tabele: articles, articles_categories oraz users i potrzbuję danych z wszytkich z nich na raz wink.gif Struktura wygląda tak: (dla uproszczenia pominę nieistotne pola w tabelach)
Tabela articles: id, category, user_add oraz user_mod.
Tabela articles_categories: id, name.
Tabela users: id, frname.

Obecnie używam takiego zapytania:
Kod
SELECT  `articles`.* ,  `users`.`frname`, `articles_categories`.`name`
FROM  `articles`
LEFT OUTER JOIN  `users` ON  `articles`.`user_add` =  `users`.`id`
LEFT OUTER JOIN  `articles_categories` ON  `articles`.`category` =  `articles_categories`.`id`
WHERE  `articles`.`id` = 30
LIMIT 1


Niestety nie mam pojęcia jak dopasować dwa pola (user_add i user_mod) i wyciągnąć pod innymi nazwami do jednej tabeli (users) wstydnis.gif
Z góry dzięki za pomoc.
mortus
  1. SELECT `arts_cats`.`name` AS cat_name, `arts`.`id` AS art_id, `u1`.`frname` AS art_author, `u2`.`frname` AS art_editor FROM `articles` AS `arts`
  2. LEFT JOIN `articles_categories` AS `arts_cats` ON `arts_cats`.`id` = `arts`.`category`
  3. LEFT JOIN `users` AS `u1` ON `u1`.`id` = `arts`.`user_add`
  4. LEFT JOIN `users` AS `u2` ON `u2`.`id` = `arts`.`user_mod`
kiler129
Hmm to nie do końca to co chce nistety - przyjrzyj się mojemu zapytaniu smile.gif
nospor
Chodziło o idee a nie dokładnie napisanie tobie rozwiązania...

Sednum sprawy jest to:
LEFT JOIN `users` AS `u1` ON `u1`.`id` = `arts`.`user_add`
LEFT JOIN `users` AS `u2` ON `u2`.`id` = `arts`.`user_mod`
czyli joinujesz dwa razy tabele users, ale używasz innych aliasów.
Dzięki temu potem w select możesz się dobrać do każdej tabeli i pobrać różne rzeczy
`u1`.`frname` AS art_author, `u2`.`frname` AS art_editor
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-2025 Invision Power Services, Inc.