我几乎花了好几个小时在这上面,如果有人可以提供帮助,我将不胜感激。
我正在对数据进行mysql搜索:
行ID列表数据
1 3,2,7,11
2 1,27
3 2,17,44
4 19,77
我的问题是我想进行严格的搜索。
假设我想搜索上述数据中包含'7'的行。
如果我这样做:
从表格中选择id,其中list_data就像'%7%'
显然会返回所有4行
我想得到第一行作为我的结果。
我怎样才能实现这一目标?
提前致谢:)
答案 0 :(得分:4)
select id from table
where find_in_set(7, list_data) > 0
顺便说一句,您应该规范化您的数据,以避免将来出现此类问题。请始终只在列中存储1个值,而不是多个。
答案 1 :(得分:2)
您可以使用FIND_IN_SET
函数(另一个答案中有一个示例)或正则表达式:
SELECT id FROM `table` WHERE list_data REGEXP '(^|,)7($|,)'
然而,您似乎正在尝试将多个数据链接放到一个字段中。如果是这样,那么请避免 - 因为它违反了关系数据库原则。请改用链接表,然后使用SQL JOIN运算符重写您的查询。
答案 2 :(得分:1)
您的表格式是错误的。它必须是
id Data
1 3
1 2
1 7
1 11
2 1
2 27
3 2
3 17
3 44
4 19
4 77
和查询
select id from table where data = 7