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