在MySQL问题中搜索多个值

在MySQL问题中搜索多个值,mysql,search,Mysql,Search,我试图在数据表中搜索两个关键字,但遇到了以下问题:即使我知道大约有36个关键字,也没有返回任何resolutes 谁能帮我写一个更好的查询 SELECT user_id, name, value FROM data INNER JOIN fields ON data.field_id = fields.id WHERE name IN ('Type', 'Category') AND value = 'Keyword 1' AND value = 'Keyword 2' /* If

我试图在数据表中搜索两个关键字,但遇到了以下问题:即使我知道大约有36个关键字,也没有返回任何resolutes

谁能帮我写一个更好的查询

SELECT user_id, name, value
FROM data
    INNER JOIN fields ON data.field_id = fields.id 
WHERE name IN ('Type', 'Category')
AND value = 'Keyword 1'
AND value = 'Keyword 2'  /* If I use OR it returns 50 records of those +14 are irrelevant*/
GROUP BY user_id
HAVING COUNT(user_id)>1
ORDER BY value

我遗漏了什么吗?

您需要将条件分组如下:

WHERE name IN ('Type', 'Category')
AND (value = 'Keyword 1'
    OR value = 'Keyword 2' )
否则MySql将返回关键字为2但名称不是Type或Category的行


或者,查看。

您需要将条件分组如下:

WHERE name IN ('Type', 'Category')
AND (value = 'Keyword 1'
    OR value = 'Keyword 2' )
否则MySql将返回关键字为2但名称不是Type或Category的行


或者,查看。

注意添加的括号:

SELECT user_id, name, value
FROM data
INNER JOIN fields ON data.field_id = fields.id 
WHERE name IN ('Type', 'Category')
AND (value = 'Keyword 1'
OR value = 'Keyword 2') 
GROUP BY user_id
HAVING COUNT(user_id)>1
ORDER BY value
SQL从左到右绑定,所以

WHERE name IN ('Type', 'Category') AND value = 'Keyword 1' OR value = 'Keyword 2'
相当于

WHERE (name IN ('Type', 'Category') AND value = 'Keyword 1') OR value = 'Keyword 2'
因此,您可以查看额外记录的来源-所有具有
值='Keyword 2'
的记录都将被包括在内,而不管
名称如何

当然,你也可以写:

WHERE name IN ('Type', 'Category') AND value IN ('Keyword 1', 'Keyword 2')

这就消除了优先级问题。

请注意添加了括号:

SELECT user_id, name, value
FROM data
INNER JOIN fields ON data.field_id = fields.id 
WHERE name IN ('Type', 'Category')
AND (value = 'Keyword 1'
OR value = 'Keyword 2') 
GROUP BY user_id
HAVING COUNT(user_id)>1
ORDER BY value
SQL从左到右绑定,所以

WHERE name IN ('Type', 'Category') AND value = 'Keyword 1' OR value = 'Keyword 2'
相当于

WHERE (name IN ('Type', 'Category') AND value = 'Keyword 1') OR value = 'Keyword 2'
因此,您可以查看额外记录的来源-所有具有
值='Keyword 2'
的记录都将被包括在内,而不管
名称如何

当然,你也可以写:

WHERE name IN ('Type', 'Category') AND value IN ('Keyword 1', 'Keyword 2')
这样就消除了优先级问题。

试试这个-

SELECT user_id, name, value
FROM data
    INNER JOIN fields ON data.field_id = fields.id 
WHERE name IN ('Type', 'Category')
AND value in( 'Keyword 1','Keyword 2') 
GROUP BY user_id
HAVING COUNT(user_id)>1
ORDER BY value
试试这个-

SELECT user_id, name, value
FROM data
    INNER JOIN fields ON data.field_id = fields.id 
WHERE name IN ('Type', 'Category')
AND value in( 'Keyword 1','Keyword 2') 
GROUP BY user_id
HAVING COUNT(user_id)>1
ORDER BY value

谢谢,拉里刚刚测试了选项4,效果很好。除了我现在意识到,如果假设一个用户有两条“关键字1”而不是“关键字2”的记录,它仍然会被添加到查询中。

是否有任何方法使查询只从两个名称字段返回具有“关键字1”和“关键字2”的记录?很可能是,但您必须更清楚地说明您想要返回哪些记录。我的建议是发布一个新问题,包括一些示例输入记录,并显示您期望从输入中得到的结果。感谢Larry刚刚测试了选项4,并且工作正常。除了我现在意识到,如果假设一个用户有两条“关键字1”而不是“关键字2”的记录,它仍然会被添加到查询中。

是否有任何方法使查询只从两个名称字段返回具有“关键字1”和“关键字2”的记录?很可能是,但您必须更清楚地说明您想要返回哪些记录。我的建议是发布一个新问题,包括一些示例输入记录,并显示您期望从该输入中得到的结果。是的,全文搜索有点让我不知所措:)谢谢您的帮助link@thisisnousername检查我的答案的变体是的,全文搜索有点过头了:)谢谢你的帮助link@thisisnousername检查我的这个答案的变化