Несколько LEFT JOIN из одной таблицы

Gluk

Новичок
Несколько LEFT JOIN из одной таблицы

Есть таблица пользователей (ID, Name).
Есть таблица страниц с ID автора и ID отредактировавшего.

Как выбрать одним запросом из таблицы страниц все записи и заодно имена (Name) автора и отредактировавшего из таблицы пользователей?

Если только имя автора выбрать, то получается

SELECT `pages`.*, `users`.`Name` AS `Aut`,
FROM `pages`
LEFT JOIN `users` ON `pages`.`Creator` = `users`.`ID`

а как выбрать еще имя отредактировавшего?
 

Nime

Guest
SELECT pages.*, u1.name as author, u2.name as editor
FROM pages p
JOIN users u1 ON p.creator=u1.ID
LEFT JOIN users u2 ON p.editor=u2.ID
 

fixxxer

К.О.
Партнер клуба
Gluk
А зачем в данном случае использовать внешние объединения?
Вообще, создается впечатление, что многие из каких-то "вумных" книжек вычитали, что "объединение таблиц делается с помощью left join", и шпарят этот самый лефт джойн везде где ни попадя...

Вот в этом примере - left join может понадобиться для выборки отредактировавшего, ибо он может и отсутствовать. В приведенном же атвором топика примере, похоже, достаточно обычно объединения в виде table1.id=table2.id....

PS. И эта мода на `написание`.`обратных-одиночных-кавычек` тоже непонятно откуда... Читабельность снижается сильно, а толку-ноль.
 

Romantik

TeaM PHPClub
Код:
SELECT pages.*, users.Name AS Aut,
FROM pages
LEFT JOIN users ON pages.Creator = users.ID 
INNER JOIN editors ON pages.Editor = editors.ID
вроде так. проверь
 

Nime

Guest
fixxer, "моду" задаёт PHPMyAdmin откуда это копируется :)

Romantik, только наоборот надо. Для users обычный JOIN, а для Editors LEFT. И editors это алиас должен быть, а не таблица...

Я тоже поторопился когда писал и оба сделал обязательными :)
 

Nime

Guest
Если оба join будут inner, то будет необходимо наличие как автора, так и редактора для того, чтобы запись показалась.

Потому сейчас в моём первом посте второй join подправлен на left.
 
Сверху