У меня есть запрос с оператором CASE, который определяет переменную object_name
, эта переменная получена либо из таблицы x_ambitions
, либо из таблицы x_trybes
. Запросы, приведенные ниже, были объединены, поэтому я мог бы упростить его, просто выполнив один SQL-запрос.MySQL CASE LEFT JOINS возвращает NULL
Я разделил инструкцию SELECT на два, чтобы у вас было лучшее понимание. Два запроса ниже. Работайте и вытащите правильное имя_объекта из базы данных.
Проблема, с которой я сталкиваюсь, когда я совмещаю два запроса, заключается в том, что случаи 'new_join_ambition','new_created_ambition','new_liked_ambition'
имя_объекта возвращает NULL в LEFT JOIN
.
В комбинированном запросе, если я приведу чехлы: 'new_join_ambition','new_created_ambition','new_liked_ambition'
над случаями 'new_join_trybe','new_created_trybe','new_liked_trybe'
. Происходит обратное. Строки trybe возвращают NULL
.
Два SQL запросов:
A: (получить объект А)
SELECT
s.id,
s.object_id,
s.type,
s.postee_id,
s.user_id,
s.text,
s.registered,
CONCAT(u.x_first_name,' ',u.x_last_name) AS postee_name,
ui.image_id AS postee_image_id,
CASE s.type
WHEN 'new_join_ambition'
OR 'new_created_ambition'
OR 'new_liked_ambition'
THEN a.name
ELSE 'a'
END AS object_name
FROM
x_share s
LEFT JOIN
x_user u ON u.id = s.postee_id
LEFT JOIN
x_user_images ui ON ui.user_id = s.postee_id
LEFT JOIN
x_ambitions a ON s.type IN ('new_join_ambition', 'new_created_ambition', 'new_liked_ambition') AND s.object_id = a.id
LEFT JOIN
x_ambition_invites ai ON s.type IN ('new_join_ambition') AND s.object_id = ai.ambition_id AND s.postee_id = ai.to
LEFT JOIN
x_ambition_likes al ON s.type IN ('new_liked_ambition') AND s.object_id = al.ambition_id AND s.postee_id = al.profile_id
LEFT JOIN
x_ambition_owner aoo ON s.type IN ('new_created_ambition') AND s.object_id = aoo.ambition_id
WHERE
s.user_id = '%s'
ORDER BY
s.registered DESC
B: (Извлечь объект B)
SELECT
s.id,
s.object_id,
s.type,
s.postee_id,
s.user_id,
s.text,
s.registered,
CONCAT(u.x_first_name,' ',u.x_last_name) AS postee_name,
ui.image_id AS postee_image_id,
CASE s.type
WHEN 'new_join_trybe'
OR 'new_created_trybe'
OR 'new_liked_trybe'
THEN t.name
ELSE 'a'
END AS object_name
FROM
x_share s
LEFT JOIN
x_user u ON u.id = s.postee_id
LEFT JOIN
x_user_images ui ON ui.user_id = s.postee_id
LEFT JOIN
x_trybes t ON s.type IN ('new_join_trybe', 'new_created_trybe', 'new_liked_trybe') AND s.object_id = t.id
LEFT JOIN
x_trybe_invites ti ON s.type IN ('new_join_trybe') AND s.object_id = ti.trybe_id AND s.postee_id = ti.to
LEFT JOIN
x_trybes_likes tl ON s.type IN ('new_liked_trybe') AND s.object_id = tl.trybe_id AND s.postee_id = tl.profile_id
LEFT JOIN
x_trybe_owner too ON s.type IN ('new_created_trybe') AND s.object_id = too.trybe_id
WHERE
s.user_id = '%s'
ORDER BY
s.registered DESC
Я побежал как запросы и имеют записанные изображения результатов обоих запросов.
Set A:
Набор B:
Как я могу объединить два без object_name возвращающей NULL? Если у вас есть какие-либо вопросы, пожалуйста, используйте комментарии, и я отвечу без колебаний.
Заранее спасибо
вы могли бы сделать скрипку. и разместить точный вывод – amdixon