Mysql 查询中的多个LIKE语句
我目前正在为烘焙食谱搜索引擎工作,该网站根据用户拥有的配料返回食谱。我只想返回两种成分都以某种形式存在的食谱。我尝试了下面的SQL语句,但我似乎无法让它与AND一起正常工作。在AND和AND之间,无论是否使用AND,它都可以正常工作Mysql 查询中的多个LIKE语句,mysql,sql,xampp,mariadb,Mysql,Sql,Xampp,Mariadb,我目前正在为烘焙食谱搜索引擎工作,该网站根据用户拥有的配料返回食谱。我只想返回两种成分都以某种形式存在的食谱。我尝试了下面的SQL语句,但我似乎无法让它与AND一起正常工作。在AND和AND之间,无论是否使用AND,它都可以正常工作 SELECT * FROM ingredients WHERE name LIKE '%flower%' AND name LIKE '%egg%' 它没有抛出任何错误,只是说没有任何结果,这很奇怪,因为第一个配方中已经有机器人成分 我希望有人能帮助我!提前感谢使
SELECT * FROM ingredients WHERE name LIKE '%flower%' AND name LIKE '%egg%'
它没有抛出任何错误,只是说没有任何结果,这很奇怪,因为第一个配方中已经有机器人成分
我希望有人能帮助我!提前感谢使用聚合:
SELECT recipe_id
FROM ingredients i
GROUP BY recipe_id
HAVING SUM(name LIKE '%flower%') > 0 AND
SUM(name LIKE '%egg%') > 0;
SELECT recipe_id
FROM ingredients
WHERE name LIKE '%flower%' OR name LIKE '%egg%'
GROUP BY recipe_id
HAVING COUNT(DISTINCT CASE
WHEN name LIKE '%flower%' THEN 1
WHEN name LIKE '%egg%' THEN 2
END) = 2
请注意,虽然有一些花,但它们不太可能出现在食谱中!。面粉更常见。先过滤表格,然后使用条件聚合:
SELECT recipe_id
FROM ingredients i
GROUP BY recipe_id
HAVING SUM(name LIKE '%flower%') > 0 AND
SUM(name LIKE '%egg%') > 0;
SELECT recipe_id
FROM ingredients
WHERE name LIKE '%flower%' OR name LIKE '%egg%'
GROUP BY recipe_id
HAVING COUNT(DISTINCT CASE
WHEN name LIKE '%flower%' THEN 1
WHEN name LIKE '%egg%' THEN 2
END) = 2
我想你可以通过子查询和计数技巧来解决这个问题。 假设我们有沙拉和汤的食谱。请原谅我的怪作文
id, recipe_name
--- -----------
1, 'Summer salad'
2, 'Italian soup'
以及它们各自的成分
id, recipe_id, ing_name, ing_amount
--- ---------- --------- ----------
1, 1, 'egg', 200
2, 1, 'flower', 300
3, 1, 'parsley', 10
4, 1, 'salt', 5
5, 2, 'egg', 200
6, 2, 'salt', 15
如果我们的目标是显示存在所有枚举记录的配方,请使用此类查询:
选择食谱*
根据食谱
参加
选择配方标识
配料
哪里
正在生成名称,如“%flower%”或
正在生成名称,如“%egg%”
按配方id分组
计数*=2的
作为g.recipe_id=recipes.id上的g
i、 e.通过OR运算符组合条件,然后计算其中有多少是真的。
c1或c2或c3组由。。。计数*等于3的
你确定这两种成分都出现在名称中吗?规范化你的模式,看看你似乎不明白逻辑运算符是如何工作的。事实上,在日常讲话中,SQL中的“选择A和B”听起来像是“选择*其中x='A'或x='B'”。在SQL中,逻辑运算符仅在单个条目内工作。这不是条目的并集。请给出两个应该匹配的行的示例。这一个非常有效,解决了我的问题!再次感谢。这一个和我评论的另一个一样好。解决我的问题!再次感谢。