Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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查找集合中包含所有搜索字符串的结果_Mysql - Fatal编程技术网

MySQL查找集合中包含所有搜索字符串的结果

MySQL查找集合中包含所有搜索字符串的结果,mysql,Mysql,我使用以下SQL查询来搜索本例中的产品: SELECT sql_cache distinct p.products_id FROM products p INNER JOIN filter_association_products fap ON p.products_id =fap.products_id WHERE p.products_status = '1' AND date_sub(curdate(),interval

我使用以下SQL查询来搜索本例中的产品:

SELECT     sql_cache distinct p.products_id
FROM       products p 
INNER JOIN filter_association_products fap 
ON         p.products_id =fap.products_id 
WHERE      p.products_status = '1' 
AND        date_sub(curdate(),interval 3000 day) <= p.products_date_added 
AND        find_in_set(fap.filter_id,'130,128') 
ORDER BY   p.products_date_added DESC
现在它的工作方式是:

AND (fap.filter_id = '130' OR fap.filter_id = '128')

如何实现这一点?

要解决这个问题,您需要告诉sql引擎每种类型需要多少匹配结果。通常不指定逗号分隔的元素,而是使用find_in_set在未知元素列表中查找特定的内容。您可以轻松地将其更改为
IN()
语句

WHERE p.produccts_status = 1
AND ....
AND fap.filder_id IN(130, 128)
使用提供的函数/方法编写代码是更好的标准,这些函数/方法可以实现它们的预期功能。也就是说,如果你愿意,你可以保持原样

您需要按p.products\u id添加一个
组,并包括一个HAVING子句来计算记录数

HAVING count(p.products_id) = 2
我把2放在这里,因为您只需要寻找2个必须匹配的项目 你可以很容易地改变这是多少你正在寻找。由于它是您专门寻找的内容,因此您应该能够指定需要多少匹配行(因为您在
in
语句中指定了它们)

选择sql\u缓存不同的p.products\u id
来自产品p
内部连接过滤器协会产品fap
在p.products\u id=fap.products\u id上
其中p.products\u status='1'

和date_sub(curdate(),间隔3000天)实际上,您需要这样的东西:

AND fap.filter_id IN ('130', '128')
GROUP BY p.products_id
HAVING COUNT(*) = 2
方法是让所有的产品都有这两个数字,而不仅仅是精确匹配。实际上可能不止2个

但是,如果不可能两次使用相同的
filter\u id
products\u id
,则这是有效的。所以它们应该是独一无二的。
如果没有看到。

谢谢,John
和fap.filder\u id IN(130,128)
给了我与
和find\u IN\u set(fap.filter\u id,'130128')相同的精确结果,但这不是我的问题。我想找到所有同时具有filter\u id 130和128的产品id顺便说一句,你拼写错误了
filder\u id
,应该是
filter\u id
,而
products\u status
应该是
products\u status
@CreativeMind关于IN的第一部分只是一个建议。。我仍然用答案底部的HAVING从句部分回答了你的问题。。请通读一遍,我可能会误解你的答案。尝试添加group by时出现sql语法错误。你能用我的问题的完整修改来编辑你的问题吗?谢谢,伙计,救了我一天!:)你说“草莓”是什么意思?我想我误解了——但下面的答案似乎涵盖了它,而不是真正涵盖了它。我仍然得到与
和(fap.filter\u id='130'或fap.filter\u id='128')
相同的结果,而不是
和(fap.filter\u id='130'和fap.filter\u id='128')
我想你可能还没有理解给出的答案
SELECT     sql_cache distinct p.products_id
FROM       products p 
INNER JOIN filter_association_products fap 
ON         p.products_id =fap.products_id 
WHERE      p.products_status = '1' 
AND        date_sub(curdate(),interval 3000 day) <= p.products_date_added 
AND        fap.filter_id IN (130, 128) 
GROUP BY   p.products_id
HAVING     COUNT(*) = 2
ORDER BY   p.products_date_added DESC
AND fap.filter_id IN ('130', '128')
GROUP BY p.products_id
HAVING COUNT(*) = 2