У меня есть этот запрос
SELECT articles.*,
users.username AS `user`
FROM `articles`
LEFT JOIN `users` ON articles.user_id = users.id
ORDER BY articles.timestamp
В основном это возвращает список статей и имени пользователя, с которым связана статья. Теперь, если нет никакой записи в пользовательской таблице для конкретного идентификатора пользователя, users
var является ПУСТЫМ. Там должен так или иначе сделать его этим, если его пустой указатель это возвращает что-то как "Пользователь, Не Найденный"? или я должен был бы сделать это использование php?
Использование:
SELECT a.*,
COALESCE(u.username, 'User Not Found') AS `user`
FROM ARTICLES a
LEFT JOIN USERS u ON u.id = a.user_id
ORDER BY articles.timestamp
Документация:
Причина выбора COALESCE вместо IF или IFNULL заключается в том, что COALESCE является стандартом ANSI, в то время как другие методы надежно не реализованы по сравнению с другими базы данных. Я бы использовал CASE, прежде чем смотреть на IF, потому что, опять же, CASE является стандартом ANSI, что упрощает перенос запроса в другие базы данных.
Вы можете использовать IF ()
там, где в Oracle вы использовали бы декодирование.
Итак
SELECT articles.*, IF(users.username IS NULL, 'No user found', users.username) AS `user`
FROM `articles` LEFT JOIN `users` ON articles.user_id = users.id
ORDER BY articles.timestamp
Должно работать. Примечание. У меня нет под рукой mysql, поэтому я не проверял запрос. Но должен работать с небольшими изменениями, если он не работает. Не голосуйте против;)
Вы можете использовать функцию IFNULL :
SELECT articles.*, IFNULL(users.username, 'User Not Found') AS `user`
FROM `articles` LEFT JOIN `users` ON articles.user_id = users.id
ORDER BY articles.timestamp
SELECT articles.*,
IFNULL(users.username,'User Not Found') AS `user`
FROM `articles`
LEFT JOIN `users` ON articles.user_id = users.id
ORDER BY articles.timestamp