Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查询中的多个LIKE语句_Mysql_Sql_Xampp_Mariadb - Fatal编程技术网

Mysql 查询中的多个LIKE语句

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%' 它没有抛出任何错误,只是说没有任何结果,这很奇怪,因为第一个配方中已经有机器人成分 我希望有人能帮助我!提前感谢使

我目前正在为烘焙食谱搜索引擎工作,该网站根据用户拥有的配料返回食谱。我只想返回两种成分都以某种形式存在的食谱。我尝试了下面的SQL语句,但我似乎无法让它与AND一起正常工作。在AND和AND之间,无论是否使用AND,它都可以正常工作

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中,逻辑运算符仅在单个条目内工作。这不是条目的并集。请给出两个应该匹配的行的示例。这一个非常有效,解决了我的问题!再次感谢。这一个和我评论的另一个一样好。解决我的问题!再次感谢。