Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выборка групп из MySQL

271
26 мая 2011 года
MrXaK
721 / / 31.12.2002
есть таблица, в ней есть одно поле, допустим user_groups, в нём через неопределённый знак препинания (. или ,) лежат группы пользователей.. пока была задача и решалась довольно в лоб запросом вида
SELECT * FROM testusergroup WHERE user_groups REGEXP ('^6[^6]*$|^[^6]+[.,]{1}6[^6]+|[^6]+6$')
(ну на месте 6 номер нужной группы).. но теперь встал вопрос, а если надо будет выбрать несколько групп, не нехорошо добавлять каждое условие в where через or.. можно это как-нибудь сделать не меняя структуры базы (то есть не предлагайте пожалуйста переделать таблицы под связь многие ко многим, знаю там всё будет элементарно, но здесь нельзя)))
Заранее спасибо
37K
26 мая 2011 года
freets
97 / / 15.10.2010
как вариант, динамически менять регулярное выражение
хотя как-то проблема размыто написана, вам нужно выбирать все записи содержащие идентификаторы определённых групп?
277
26 мая 2011 года
arrjj
1.7K / / 26.01.2011
хз, я в регулярках не очень силён, но вот так например(выбор групп 6 или 7):
 
Код:
SELECT * FROM testusergroup WHERE user_groups REGEXP('(^|[.,])(6|7)([.,]|$)');

Ваш вариант неправильный кстати.
271
26 мая 2011 года
MrXaK
721 / / 31.12.2002
arrjj: да, спасибо)) так намного лучше и удобнее)
а в чём мой вариант неправильный? чтобы больше так не написать? ) вообще он работал
277
26 мая 2011 года
arrjj
1.7K / / 26.01.2011
отсеивание неправильное выбирает не только группу 6 но и 16, 26 ... кроме 66
366
27 мая 2011 года
int
668 / / 30.03.2005
По первому посту:
Цитата:
[.,]{1}

тут {1} вообще лишний
Вообще, похоже, что будут выбираться все x6 и 6x названия, где x - всё, что угодно, кроме 6

271
27 мая 2011 года
MrXaK
721 / / 31.12.2002
16, 26 и прочие точно не выбираются)) запятая же стоит перед 6.. а вот 60, 600 и т. п. да, мой косяк..
277
27 мая 2011 года
arrjj
1.7K / / 26.01.2011
Выбираются:)
 
Код:
mysql> SELECT * FROM test WHERE groups REGEXP ('^3[^3]*$|^[^3]+[.,]{1}3[^3]+|[^3]+3$') ;
+----+---------+
| id | groups  |
+----+---------+
|  3 | 1,2,3   |
|  4 | 1,2,3,4 |
|  6 | 23      |
|  7 | 3       |
+----+---------+
4 rows in set (0.02 sec)
12
27 мая 2011 года
alekciy
3.0K / / 13.12.2005
Мне так видится, что изначально структура базы неправильная и данный пример это иллюстрирует вполне очевидно. Хотя бы тем, что индекс на таком запросе использоваться не будет.

Поэтому нужно не регулярку переписывать, а структуру менять.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог