Страница 1 из 1

ругулярки

Добавлено: 2009-12-26 13:45:11
Bormental
как реализовать условие И в регулярках, например ИЛИ работает при такой конструкции
SELECT * FROM `razdel2` WHERE TXT regexp 'закон|рф'
а И работает только в таком виде
SELECT * FROM `razdel2` WHERE TXT regexp 'закон' and TXT regexp 'рф'
можно как нибудь составить запрос чтото вроде
SELECT * FROM `razdel2` WHERE TXT regexp 'закон&&рф'
т.е. выводились строки где TXT содержит оба слова, независимо от порядка


есть еще конечно MATCH AGAINST но у меня он с cp1251 выдает все по нулям на кирилице, с латиницей работает нормально

мускл 5.1 виндовые и юниксовые сборки

Re: ругулярки

Добавлено: 2009-12-26 15:07:29
zg
Bormental писал(а):SELECT * FROM `razdel2` WHERE TXT regexp '(закон.*рф)|(рф.*закон)'
Bormental писал(а):но у меня он с cp1251 выдает все по нулям
юзай UTF-8 и лучше юзать LIKE :roll:

Re: ругулярки

Добавлено: 2009-12-26 15:49:56
Bormental
zg писал(а):
Bormental писал(а):SELECT * FROM `razdel2` WHERE TXT regexp '(закон.*рф)|(рф.*закон)'
это конечно интересно, а если слов 20? переборов многовасто будет, чем лайк лучше регекспа?

Re: ругулярки

Добавлено: 2009-12-26 16:01:38
zg
Bormental писал(а):это конечно интересно, а если слов 20?
тогда только LIKE :smile:
Bormental писал(а):чем лайк лучше регекспа?
он лучше оптимизитрован

Re: ругулярки

Добавлено: 2009-12-26 21:09:22
Bormental
кстати LIKE не пахает с кирилицей в 1251 кодировочке))) на ютф както не хоца переписывать все

Re: ругулярки

Добавлено: 2009-12-26 21:23:43
zg
http://anton-pribora.ru/articles/mysql/mysql-charsets/
...
Расставляя точки над и, Character Set - транслируется как "кодировка", а Collation - сравнение. В чём разница? Сравнение - это правила сравнения букв кодировки. Сравнения работают только в рамках кодировки, и нельзя сравнивать данные в латинице по правилам кирилицы. Поясню на примере: мы, как увидим позже, внесли данные в таблицу на латинице, а сортировать нужно на кирилице, для чего можно использовать ключевое слово collate:
Bormental писал(а):на ютф както не хоца переписывать все
всё и не нада, только базу