0

我在这方面几乎被困了几个小时,如果有人能提供帮助,我将不胜感激。

我正在对数据进行 mysql 搜索:

行 ID 列表数据
1 3,2,7,11
2 1,27
3 2,17,44
4 19,77

我的问题是我想做一个严格的搜索。

假设我想搜索上述数据中具有“7”的行。

如果我做 :

从 list_data like '%7%' 的表中选择 id

显然会返回所有 4 行

我只想得到第一行作为我的结果。

我怎样才能做到这一点?

提前致谢 :)

4

3 回答 3

4

使用FIND_IN_SET()

select id from table 
where find_in_set(7, list_data) > 0

顺便说一句,您应该规范化您的数据以避免将来出现此类问题。请始终在列中仅存储一个值,而不是多个值。

于 2013-09-04T11:32:43.973 回答
2

您可以使用FIND_IN_SET函数(另一个答案中有一个示例)或正则表达式:

SELECT id FROM `table` WHERE list_data REGEXP '(^|,)7($|,)'

但是,您似乎正试图将多个数据链接放在一个字段中。如果是这样,那么避免这种情况 - 因为它违反了关系数据库原则。请改用链接表,然后您的查询将使用SQL JOIN运算符重写。

于 2013-09-04T11:37:31.473 回答
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 
于 2013-09-04T11:39:43.997 回答