Я хочу объединить несколько таблиц со следующей структурой:
Users (userId, name)
Emoticons (emoticonId, name)
UnlockedEmoticons (userId, emoticonId, name)
Для каждого элемента, я хочу показать, если определенный смайлик разблокирован пользователем, как:
1(emoticonId), emoticonA(name), unlocked (userId IS NOT NULL) AS has?,
2(emoticonId), emoticonB(name), locked (userId IS NOT NULL) AS has?
Проблема в том, что если в unlockedEmoticons нет userId, я получаю пустые результаты.
SELECT e.*, (ue.id IS NOT NULL) AS 'has'
FROM UnlockedEmoticons ue RIGHT JOIN emoticons e ON ue.emoticonId = e.emoticonId
LEFT JOIN users u ON u.id = ue.userId
WHERE uk.userId = 33
Я попытался изменить заказы на заявки на присоединение, но ничего не получилось. Есть ли способ сделать это?
Я использую mysql 5.7
Трюк состоит в том, чтобы включить AND после операторов ON:
FROM UnlockedEmoticons ue RIGHT JOIN emoticons e ON ue.emoticonId = e.emoticonId AND ue.userId = #{userId}
и удалить инструкции WHERE. :)