MYSQL爆炸搜索

时间:2013-06-16 19:19:54

标签: mysql sql

我有一个像这样的“1; 2; 3; 4; 8; 9; 11;”

的字段

如果我想搜索一个数字是否在这个范围内,我就这样做:

SELECT * FROM table WHERE [id] LIKE '[number];%' OR '%;[number];%'

还有另一种更简单的方法可以分割字符串吗?

非常感谢

4 个答案:

答案 0 :(得分:1)

如果要将值存储在字符串中,使用like的最佳方法是:

SELECT *
FROM table
WHERE concat(';', @numbers) like concat('%;', [id], ';%')

当分隔符是逗号时,MySQL还提供find_in_set()

SELECT *
FROM table
WHERE find_in_set(id, replace(@numers, ';', ',')

答案 1 :(得分:0)

IN()与逗号分隔的ID字符串

一起使用
SELECT * FROM table WHERE id IN(1,2,3,4,8,9,11)

答案 2 :(得分:0)

  1. 创建另一个名为helper的表,其中包含两个字段:numberid。您需要通过拆分id字段以编程方式创建它,并为每个id中的每个数字在此表中添加一行。
  2. number
  3. 上创建此表的索引
  4. select table.* from table where id in (select id from helper where number = 23)

答案 3 :(得分:0)

你可以用这个

SELECT name ,`from`, find_in_set('4' , REPLACE(`from`, ';', ',')) as the_place_of_myval FROM reservation 
having the_place_of_myval != 0
  • 注意:在我的查询中我正在搜索数字为4的字符串
我的演示中的

demo here有两个例子。