Я пытаюсь сделать довольно сложный (по крайней мере для меня) запрос, который включает выборку строк, которые могут иметь значения NULL
.
Здесь четыре таблицы: tags
, questions_tags
, users_experience
и answers
. Связи довольно просты. Вопросы помечены тегами, теги имеют имена, пользователи дают ответы на вопросы, а пользователи имеют опыт работы с конкретными тегами. Я хочу найти ответы, которые дали пользователи, и их опыт (который может быть NULL
) для тегов этих вопросов. Я упорядочиваю по количеству ответов, заданных для конкретного тега.
Мой запрос выглядит следующим образом. Это совсем не оптимизировано (и если у вас есть предложения по оптимизации, пожалуйста, предложите прочь!):
SELECT t.tag_id, t.name, ue.body, COUNT(a.qid)
FROM tags AS t
LEFT JOIN users_experience AS ue
ON t.tag_id = ue.tag_id
LEFT JOIN questions_tags AS qt
ON qt.tag_id = t.tag_id
LEFT JOIN answers AS a
ON a.qid = qt.qid
WHERE a.uid=1
GROUP BY t.tag_id
ORDER BY COUNT(a.qid) DESC;
Проблема, с которой я сталкиваюсь в приведенном выше запросе, заключается в том, что, если кто-нибудь отметил опыт работы с определенным тегом, он покажет пользователю, является ли он его опытом или нет. Я хотел бы видеть только опыт конкретного пользователя, который этот запрос просто не делает. Я столкнулся с этой проблемой в другом месте и был озадачен, поэтому пришлось взломать ее.
Я попытался добавить AND ue.uid = 1
к запросу, но это ограничит результаты только для тех случаев, когда опыт уже предоставлен, и не вернет также значения NULL
, которые я желаю.
Есть мысли о том, что делать?