Не потрудитесь делать его сами, просто используйте datejs.
Вам нужно дать пользовательской таблице псевдоним при втором присоединении к ней
, например,
SELECT article . * , section.title, category.title, user.name, u2.name
FROM article
INNER JOIN section ON article.section_id = section.id
INNER JOIN category ON article.category_id = category.id
INNER JOIN user ON article.author_id = user.id
LEFT JOIN user u2 ON article.modified_by = u2.id
WHERE article.id = '1'
Вы дважды упомянули "пользователь" в своем предложении FROM. Вы должны предоставить псевдоним таблицы хотя бы для одного упоминания, чтобы каждое упоминание пользователя. может быть прикреплен к одному или другому экземпляру:
FROM article INNER JOIN section
ON article.section_id = section.id
INNER JOIN category ON article.category_id = category.id
INNER JOIN user **AS user1** ON article.author\_id = **user1**.id
LEFT JOIN user **AS user2** ON article.modified\_by = **user2**.id
WHERE article.id = '1'
(Вам может понадобиться что-то другое - я догадался, какой пользователь является каким, но механизм SQL не догадывается.)
Кроме того, возможно, вам нужен был только один «пользователь» . Кто знает?
Ваша ошибка связана с тем, что у вас есть:
JOIN user ON article.author_id = user.id
LEFT JOIN user ON article.modified_by = user.id
У вас есть два экземпляра одной и той же таблицы, но база данных не может определить, что есть что. Чтобы исправить это, вам нужно использовать псевдонимы таблиц :
JOIN USER u ON article.author_id = u.id
LEFT JOIN USER u2 ON article.modified_by = u2.id
Это хорошая привычка - всегда использовать псевдонимы для ваших таблиц, если вам не нравится писать полное имя таблицы все время, когда у вас нет подобных ситуаций.
Следующие проблемы, которые необходимо решить, будут:
SELECT article.* , section.title, category.title, user.name, user.name
1) Никогда не используйте SELECT *
- всегда указывайте нужные столбцы, даже если это вся таблица. Прочтите этот вопрос SO, чтобы понять, почему .
2) Вы получите неоднозначные ошибки столбца, связанные со столбцами user.name
, потому что, опять же, база данных не может определить, какая таблица экземпляр, из которого нужно извлечь данные. Использование псевдонимов таблиц устраняет проблему:
SELECT article.* , section.title, category.title, u.name, u2.name