我有一个像魅力一样工作的查询,但现在我需要按当前在已GROUP_CONCAT
创建字段中的值对其进行过滤。我了解到我可以使用 HAVING 进行过滤,但我找不到要使用的语法,因为HAVING groupconcatname LIKE '%6%'
会找到 6、16、26 等。我需要让语句搜索特定值,以便它可以在groupconcat 包含1,5,8,18,30,58
但找不到8 AND 18 AND 58,因为我使用了 LIKE '%%'。
我的查询(现在可以工作..但基于部分匹配发现太多结果%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 语句时,似乎是对正常运行的WHEREmeta_ids
的合理尝试,它忽略了在我的子句中使用的有效变量/字段这一事实并出错.
有什么建议吗?
谢谢,
银虎
更新 - 除非有更优雅的方式解决
根据下面 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')