подскажите список регулярок в запросах MySQL

Статус
В этой теме нельзя размещать новые ответы.

romas_s

Гуру форума
Регистрация
9 Ноя 2012
Сообщения
252
Реакции
75
Подскажите плз кто шарит, какие правила регулярных выражений можно использовать в MySQL запросах????

Список всех правил написания регулярок PHP: info.za500.biz/programmirovanie/item/regulyarnye-vyrazheniya-manual

Можно все правила PHP регулярок использовать в MySQL запросах?? или только какие то особенные??

Ясное дело в запросе прописывается REGEXP
Знаю что можно использовать в MySQL запросах след список правил составления регулярных выражений:
^ - начало строки
$ - конец строки
непосредственно сам символ или целое слово.
 

BaBL

Постоялец
Регистрация
13 Ноя 2012
Сообщения
167
Реакции
107
В запросах в БД регулярные выражения не применяются на практике практически нигде, потому что работают адово медленно, а твоя задача скорее всего решается и другими методами.

Лучше расскажи что у тебя не получается, а не спрашивай как реализовать придуманное хреновое решение.
 

babahalki

Постоялец
Регистрация
6 Май 2016
Сообщения
247
Реакции
106
Кое-что есть в мануале Для просмотра ссылки Войди или Зарегистрируйся

А вообще смотри мануал регулярок по perl к примеру и проверяй на мускуле. Простые будут работать без проблем.
Для просмотра ссылки Войди или Зарегистрируйся
 

UJy

Постоялец
Регистрация
23 Авг 2011
Сообщения
385
Реакции
138
Кое-что есть в мануале
Кстати нормальный мануал, только нужно учитывать, что регулярки начали работать кажись с версии MySQL 5.5, а много где ещё стоит 4 версии...
И когда я ковырялся с регулярками - не получалось экранировать различные скобки для их выбора в строках - приходилось использовать блоки вида [.characters.] и с ними код начинал работать. Типа { = [.left-curly-bracket.], } = [.right-curly-bracket.]...
 

romas_s

Гуру форума
Регистрация
9 Ноя 2012
Сообщения
252
Реакции
75
В запросах в БД регулярные выражения не применяются на практике практически нигде, потому что работают адово медленно, а твоя задача скорее всего решается и другими методами.

Лучше расскажи что у тебя не получается, а не спрашивай как реализовать придуманное хреновое решение.

Вот зачем собственно хочу регулярку использовать в запросе:

Есть сайт info.za500.biz/programmirovanie/php

пользователь выбирает список интересующих его тегов. (чекбоксы, селекты)
В результате должны быть только те материалы в которых встречаются все выбранные пользователем теги.

Хочу делать выборку с базы данных по след условию:

К примеру мне нужен материал в статье которого одновременно будут присутствовать теги: for, function, class
Поскольку поиск по содержимому статьи будет громоздким и длинным - имеется в таблице колонка tag, в которую я при сохранении статьи вписываю теги со статьи.
Теги хранятся в таблице отдельной колонкой tag

Как построить запрос что бы с базы выбирались только те записи в которых присутствуют все выбранные теги.??

Хотелось бы сделать выборку 1 запросом с базы.
Если делать отдельными запросами по каждому тегу отдельно, выходит что материалы дублируются.

Как можно сделать выборку с базу так, что бы потом не фильтровать полученные данные с базу на предмет дублирования материалов???.

Ранее когда тегов было мало, все было удобно, но когда тегов стало очень много, стало не удобно выбирать нужные материалы. + новые теги будут постоянно добавляться по мере изучения новых тегов программирования.

Сайт на Joomla, хочу создать модуль фильтрации материалов по тегам.
Компонент ZOO, расширение JBZOO.
Фильтр JbZOO мне не подходит - нужно для фильтрации создавать новые поля, это крайне не удобно при написании статьи, каждый новый тег нужно вносить как новое значение поля.

Временное решение - google поиск для сайта, но новые статьи не сразу появляются в индексе - в этом вся соль(((.


Как правильно разбивать теги на категории пока не придумал, но разговор сейчас не об этом.

Для меня сейчас главный вопрос - правильно построить запросы выборки данных с базы (логику).
Вот для этого собственно и нужны регулярки в запросе.
 
Последнее редактирование:

BaBL

Постоялец
Регистрация
13 Ноя 2012
Сообщения
167
Реакции
107
У тебя первая проблема не в регулярках, а в кривой схеме БД. Посмотри что такое нормализация данных.

Таблицу тегов нужно вынести отдельно, связь у тебя многие-ко-многим,у одной статьи может быть несколько тегов, один тег может принадлежать нескольким статьям. Реализуй эту связь, поставь 2 индекса (а точнее 2 foreign key) и будешь очень быстро одним запросом выбирать эти статьи.

Поверь, твоя задача присутствует в 90% проектов в интернете и 99% из них не исопльзуют для ее решения регулярки.
 

romas_s

Гуру форума
Регистрация
9 Ноя 2012
Сообщения
252
Реакции
75
Таблицу тегов нужно вынести отдельно, связь у тебя многие-ко-многим,у одной статьи может быть несколько тегов, один тег может принадлежать нескольким статьям. Реализуй эту связь, поставь 2 индекса (а точнее 2 foreign key) и будешь очень быстро одним запросом выбирать эти статьи.


Как бы Вы составили запрос выборки с базы данных по условию:
в материале должны обязательно присутствовать все 3 тега: for, echo, if
Сами теги можно хранить где угодно и в каком угодно виде с любой структурой.

Наведите пример, как бы Вы сделали такую выборку на примере, структуру базы данных берите какую угодно, какая Вам нравится.
Меня интересует как будет выглядеть тот самый 1 запрос выборки данных по 3 тегам одновременно.
 

BaBL

Постоялец
Регистрация
13 Ноя 2012
Сообщения
167
Реакции
107
Ну вариантов много, можно хоть так:

Код:
SELECT * FROM article a join `article_tag` at on at.article_id = a.id where at.tag_id in (2,3) group by a.id having count(*) = 2
 

romas_s

Гуру форума
Регистрация
9 Ноя 2012
Сообщения
252
Реакции
75
А всего навсего нужно было вписать все 3 параметра поиска по тегу в скобку сравнения )).
WHERE tag IN (for,echo,if)

sqlinfo.ru/forum/viewtopic.php?pid=37304?pid=37304
тут нашел все что мне нужно, поиск по любому кол условий 1 поля + выборка уникальных записей без повторов.

Вопрос решен, тему можно закрывать.
 
Последнее редактирование:

BaBL

Постоялец
Регистрация
13 Ноя 2012
Сообщения
167
Реакции
107
Вопрос уже решен, тему можно закрывать.

sqlinfo.ru/forum/viewtopic.php?pid=37304?pid=37304
тут нашел все что мне нужно, поиск по любому кол условий 1 поля + выборка уникальных записей без повторов.
Только не делай схему как в первом посте по этой ссылке. Этот паттерн называется EAV и он антипаттерн.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху