使用mysql / php进行严格搜索

时间:2013-09-04 11:31:22

标签: php mysql regex mysqli

我几乎花了好几个小时在这上面,如果有人可以提供帮助,我将不胜感激。

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

  

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

我的问题是我想进行严格的搜索。

假设我想搜索上述数据中包含'7'的行。

如果我这样做:

  

从表格中选择id,其中list_data就像'%7%'

显然会返回所有4行

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

我怎样才能实现这一目标?

提前致谢:)

3 个答案:

答案 0 :(得分:4)

使用FIND_IN_SET()

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 
相关问题