У меня есть следующий запрос, в котором соединяется несколько таблиц. Одна из этих таблиц - profile_img
. В этой таблице представлены изображения профилей для пользователей, которые их загрузили, в противном случае они даются profile_images/default.jpg
, а пользователь не находится в таблице profile_img
, поэтому мне нужен случай сортировки, чтобы проверить, не находятся ли они в этой таблице, а затем установить их профиль изображение по умолчанию.Использование else в запросе SQL
Вот мой вопрос.
SELECT f.*, u.*, p.*
FROM friends f
LEFT JOIN
profile_img p
ON p.user_id = f.friend_one
JOIN
users u
ON u.id = f.friend_one
WHERE f.friend_two = ? AND f.status = ? AND
p.id = (select max(p2.id) from profile_img p2 where p2.user_id = p.user_id)
Я попытался ,coalesce(p.img, 'profile_images/default.jpg') as img
, чтобы попытаться получить результат, но это не помогло.
В другом запросе:
(case when p.img <> '' then p.img
else 'profile_images/default.jpg'
end) as img
Я просто не знаю, как заставить его работать в этом случае, и он не работает для этого.
Спасибо. Это сделал трюк. Не могли бы вы рассказать мне, почему работал? Что такое рассуждения? – Paul
ifnull, как и coalesce, возвращает другое значение, когда поле его тестирования равно null. В этом случае поле p.image_url является нулевым для пользователей, у которых нет изображений, поэтому вместо него возвращается default.png. Функционально это эквивалентно: case, когда p.image_url имеет значение null, а затем 'default.png' else p.image_url end as profile_pic – serverSentinel