У меня есть запрос, который работает как шарм, но теперь мне нужно отфильтровать его на значение, которое в настоящее время находится в GROUP_CONCAT
. я узнал, что я могу использовать HAVING для фильтрации, но я не могу найти синтаксис для использования, поскольку HAVING groupconcatname LIKE '%6%'
найдет 6, 16, 26 и т. д. Мне нужно, чтобы оператор выполнял поиск определенных значений, чтобы он мог найти «8 "в группе groupconcat, содержащей 1,5,8,18,30,58
, а не найти 8 И 18 И 58, потому что я использовал LIKE '%%'.MySQL HAVING с определенным номером внутри GROUP_CONCAT
Мои запросы (работает прямо сейчас .. но находит слишком много результатов, основанные на частичном матче %6%
):
SELECT offers.*, s.short_name AS sponsorName, s.logo AS sponsorLogo, GROUP_CONCAT(mn.title) titles,
GROUP_CONCAT(mo.`name`) metas, GROUP_CONCAT(om.meta_option) AS meta_ids
FROM offers
INNER JOIN offer_metas as om ON om.offer_id = local_ld_offers.id
INNER JOIN meta_options as mo ON om.meta_option = mo.id
INNER JOIN meta_names as mn ON mo.category = mn.category AND mo.cat_seq = mn.seq
LEFT JOIN sponsors AS s ON s.id=offers.sponsor
GROUP BY offers.id
HAVING meta_ids LIKE '%6%'
ORDER BY end_date ASC
Мне нужно заменить HAVING meta_ids LIKE '%6%'
с чем-то более похожее на WHERE '6' IN meta_ids
, но когда я пытаюсь чтобы заменить инструкцию HAVING, с тем, что кажется разумной попыткой функционирования WHERE, он игнорирует тот факт, что meta_ids
- допустимая переменная/поле для использования в моем предложении и ошибках.
Любые рекомендации?
Спасибо,
Silver Tiger
UPDATE - решаемые, если есть более элегантный способ
на основе рекомендаций от Thomas ниже я обновил запрос и, видимо, я могу найти так как мне необходимо добавить несколько отдельных значений, добавив линию на один вариант с использованием обновленного метода следующим образом:
WHERE EXISTS(SELECT * FROM offer_metas AS om1 WHERE om1.meta_option = mo.id AND om1.meta_option = '23')
OR EXISTS(SELECT * FROM offer_metas AS om1 WHERE om1.meta_option = mo.id AND om1.meta_option = '16')
проблема заключается в том, что om.meta_option является полем, которое может быть полем (следовательно, необходимость использования GROUP_CONCAT). Я не могу напрямую запросить om.meta_option, так как он не будет относительным результатом и не вернет другую объединенную таблицу. Мне нужно искать и фильтровать/сопоставлять в group_concat для обеспечения правильных результатов. – Silvertiger
@Silvertiger - предложение Exists, поскольку я написал, что он учитывает другие файлы, потому что соединения фильтруют строки meta_options, которые следует рассматривать в дополнение к предложению Exists. Тем не менее, если вы беспокоились об этом, вы можете просто расширить предложение Exists. – Thomas
@Silvertiger - Имейте в виду, что эффект предложения Where будет заключаться в том, что, например, '8' существует где-то в результате результата group_concat. Условие предложения, как я написал, делает то же самое. – Thomas