2013-06-16 5 views
2

У меня есть поле, которое построено так: «1; 2; 3; 4; 8; 9; 11;»MYSQL explode search

Если я хочу найти, если номер находится в этом диапазоне, что я делаю это так:

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

Есть еще более простой способ, где я могу разбить строку?

Большое спасибо

+0

http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_find-in-set – Sebas

+1

Очевидным вариантом было бы нормализовать данные .... –

ответ

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, ';', ',') 
0

Использование IN() с разделителями-запятыми строки идентификаторов

SELECT * FROM table WHERE id IN(1,2,3,4,8,9,11) 
+0

Будет ли это работать на одной строке, содержащей эти цифры? – MrVimes

+0

Разве это не вопрос о другом? –

+0

@MrVimes Да, это сработает. –

0
  1. создать еще одну таблицу под названием helper с 2-мя полями: number и id. вам необходимо программно создать его, разделив поле id и добавить одну строку в эту таблицу для каждого номера в каждом идентификаторе.
  2. создать индекс этой таблицы на number
  3. select table.* from table where id in (select id from helper where number = 23)
+0

, предполагая, конечно, что вы хотите эффективный поиск, а не проверку грубой силы – necromancer

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 in my de mo есть два примера.