выборка - поиск символов в текстовом поле

Лысый

Новичок
выборка - поиск символов в текстовом поле

здравствуйте
ситуация такая
достался движок, где список ИДшников категорий сохраняется через запятую в текстовом поле.
т.е. если сообщение относится к категориям 1, 3 и 5, то в поле будет запись 1,3,5

это нормально работало. когда надо было выбрать сообщения из одной катеоргрии

а теперь встала задача выбирать сразу из нескольких категорий. например поискать те записи. где есть 2, 3 и 4

как бы это лучше сделать?
не городить же кучу LIKE ибо единичка может так же входить в остав 11. а зяпятой после (перед) может и не быть
:(

спасибо.
 

bgm

 
Несколько вариантов:
1) Переделать структуру хранения (крайне рекомендуется);
2) Использовать LIKE (кстати, а как ты выбирал сообщения, которые относятся к первой категории из таких записей как "11,12,13"?);
3) Использовать регулярные выражения.
 

zerkms

TDD infected
Команда форума
Лысый
вот поэтому поставь ещё запятую в начало и конец и делай LIKE '%,2,%' и объединить условия ANDами
 

Selforg

Новичок
можно использовать IN во вложенных запросах:

select первая категория IN (select вторая категория IN ( третья))

но однозначно лучше:
bgm:
1) Переделать структуру хранения (крайне рекомендуется);
 

Лысый

Новичок
всем спасибо!
конечто структура хранения - гумно, но архитектура движка ещё большее гумно - менять придётся кучу всего

2 zerkms
LIKE '%,2,%' не сработает в случает строки "2" или "2, 1" или "2, 3" поэтому я и говорю, что надо городить кучу OR

2 bgm
до того делали так "where category regexp '[[:<:]]($category_id)[[:>:]]' "
т.е. регуляркой

2 Necromant
опа! это кажется оно
буду пробовать
 

Selforg

Новичок
Автор оригинала: Лысый
2 zerkms
LIKE '%,2,%' не сработает в случает строки "2" или "2, 1" или "2, 3" поэтому я и говорю, что надо городить кучу OR
Я же говорю попробуй IN - там получается что на каждом шаге ты отбираешь по одному свойству... и не надо будет перебирать все OR
Если таких свойств не очень много, то работать будет хорошо и быстрее чем OR!!
 

bgm

&nbsp;
Лысый
конечто структура хранения - гумно, но архитектура движка ещё большее гумно - менять придётся кучу всего
Менять придётся только запросы на выборку и вставку/редактирование.
 
Сверху