Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Вопрос по REGEXP в MySQL


Автор: boodi 20.10.2010, 13:50
Вопрос по регулярным в MySQL

Нужно выбрать все строки, в которых в поле field встречаются буквы a, b и c\
запрос:
Код

SELECT * FROM table WHERE field REGEXP "[abc]";

выводит строки, где в поле есть любая из этих букв...
как сделать маску на все???

пробывал пойти от противного:
Код

SELECT * FROM table WHERE field NOT REGEXP "[^abc]";

не вышло....

Автор: gta4kv 20.10.2010, 14:03
Код

SELECT * FROM table WHERE field REGEXP "abc";

Автор: boodi 20.10.2010, 14:06
мне нужно и bca.
И bcacacb, и haibyc.
Грубо говоря, слова, в которых содержатся все буквы....

а (abc) - это ж слово...

Автор: gta4kv 20.10.2010, 14:08
Код

SELECT * FROM `table` WHERE `field` REGEXP "(a|b|c)" LIMIT 0 , 30


Добавлено через 1 минуту и 4 секунды
тоже не то кажись, юпс smile

Автор: boodi 20.10.2010, 14:12
Цитата(gta4kv @ 20.10.2010,  12:08)
Код

SELECT * FROM `table` WHERE `field` REGEXP "(a|b|c)" LIMIT 0 , 30


Добавлено @ 14:09
тоже не то кажись, юпс smile

это тоже самое, что [abc]

я уж много чего перепробывал....

кстати
Код

SELECT * FROM table WHERE field NOT REGEXP "[^abc]";

выводит слова состоящие только из этих букв...

Автор: skyboy 20.10.2010, 14:45
че, только регулярками пользоваться?
Код

field regexp "a" and field regexp "b" and field regexp "c"

но для указанной задачи отлично подходит locate в таком же формате: три условия на каждую букву отдельно плюс "and" между ними.
но задача какая-то мутная.
если на самом деле тебе нужен полнотекстовый поиск(не просто буквы ищешь, а, скажем, слова и предложения), то лучше использовать предназначенные для этого средства.
если у тебя в некоем коде есть символы, которые кодируют определенную характеристику("а" - "синий", "b"  - "квадратный"), то лучше один раз это все распарсить и разложить по раздельным полям.

Автор: boodi 20.10.2010, 16:14
Цитата(skyboy @ 20.10.2010,  12:45)
че, только регулярками пользоваться?
Код

field regexp "a" and field regexp "b" and field regexp "c"

но для указанной задачи отлично подходит locate в таком же формате: три условия на каждую букву отдельно плюс "and" между ними.
но задача какая-то мутная.
если на самом деле тебе нужен полнотекстовый поиск(не просто буквы ищешь, а, скажем, слова и предложения), то лучше использовать предназначенные для этого средства.
если у тебя в некоем коде есть символы, которые кодируют определенную характеристику("а" - "синий", "b"  - "квадратный"), то лучше один раз это все распарсить и разложить по раздельным полям.

на самом деле искал именно слова по вхождениям букв...
не понимаю почему такое простое решение не впришло в мой ум smile
спасибо....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)