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)
Выборка групп из MySQL
SELECT * FROM testusergroup WHERE user_groups REGEXP ('^6[^6]*$|^[^6]+[.,]{1}6[^6]+|[^6]+6$')
(ну на месте 6 номер нужной группы).. но теперь встал вопрос, а если надо будет выбрать несколько групп, не нехорошо добавлять каждое условие в where через or.. можно это как-нибудь сделать не меняя структуры базы (то есть не предлагайте пожалуйста переделать таблицы под связь многие ко многим, знаю там всё будет элементарно, но здесь нельзя)))
Заранее спасибо
хотя как-то проблема размыто написана, вам нужно выбирать все записи содержащие идентификаторы определённых групп?
Код:
SELECT * FROM testusergroup WHERE user_groups REGEXP('(^|[.,])(6|7)([.,]|$)');
Ваш вариант неправильный кстати.
а в чём мой вариант неправильный? чтобы больше так не написать? ) вообще он работал
отсеивание неправильное выбирает не только группу 6 но и 16, 26 ... кроме 66
Цитата:
[.,]{1}
тут {1} вообще лишний
Вообще, похоже, что будут выбираться все x6 и 6x названия, где x - всё, что угодно, кроме 6
16, 26 и прочие точно не выбираются)) запятая же стоит перед 6.. а вот 60, 600 и т. п. да, мой косяк..
Код:
Поэтому нужно не регулярку переписывать, а структуру менять.