在MySQL问题中搜索多个值
我试图在数据表中搜索两个关键字,但遇到了以下问题:即使我知道大约有36个关键字,也没有返回任何resolutes 谁能帮我写一个更好的查询在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
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检查我的这个答案的变化