Mysql оставленный результат пустого указателя соединения

У меня есть этот запрос

SELECT articles.*, 
       users.username AS `user` 
 FROM `articles` 
LEFT JOIN `users` ON articles.user_id = users.id 
 ORDER BY articles.timestamp 

В основном это возвращает список статей и имени пользователя, с которым связана статья. Теперь, если нет никакой записи в пользовательской таблице для конкретного идентификатора пользователя, users var является ПУСТЫМ. Там должен так или иначе сделать его этим, если его пустой указатель это возвращает что-то как "Пользователь, Не Найденный"? или я должен был бы сделать это использование php?

16
задан OMG Ponies 24 May 2010 в 00:20
поделиться

4 ответа

Использование:

   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, что упрощает перенос запроса в другие базы данных.

35
ответ дан 30 November 2019 в 16:18
поделиться

Вы можете использовать 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, поэтому я не проверял запрос. Но должен работать с небольшими изменениями, если он не работает. Не голосуйте против;)

1
ответ дан 30 November 2019 в 16:18
поделиться

Вы можете использовать функцию 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 
5
ответ дан 30 November 2019 в 16:18
поделиться

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
0
ответ дан 30 November 2019 в 16:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: