MySQL выбрать данные из многозначного атрибута

Как выполнить запрос на выборку для многозначного атрибута? Есть ли в MySQL функция выбора определенных данных из многозначного поля? Большая помощь приветствуется. Вот пример проблемы:

Таблица

userid      groups
-------------------
  2          2,3,5
  4          1
  9          2,5,10

тип данных char(250) за groups

Я хочу сделать запрос, чтобы выбрать все userids, которые принадлежат к группе 5, в этом примере это будут идентификаторы пользователей 2 и 9. Итак:

userid
------
  2
  9

Любой способ сделать это с запросом MySQL? или с php/mysql?

2 ответа

Решение

В случае, если groups тип данных SET

Ты можешь использовать

SELECT * FROM users WHERE FIND_IN_SET('5', groups);

ОБНОВИТЬ

В случае с чаром или варчаром. Вы можете использовать это

SELECT * FROM users
WHERE 
     groups LIKE '5,%'
     OR groups LIKE '%,5'
     OR groups LIKE '%,5,%'
     OR groups = '5'

Это ужасно, но если вы хотите сделать это полностью в MySQL, вы можете сделать:

SELECT *
FROM users
WHERE groups LIKE '%,5,%'
OR groups = '5'
OR groups LIKE '%,5'
OR groups LIKE '5,%'

Вам лучше иметь отдельную таблицу с одной группой на строку и ссылкой на пользователя. Вы можете сделать соединение с гораздо более простым условием этой схемы.

SELECT users.*
FROM users
INNER JOIN users_groups ON (users.user_id = users_groups.group_id)
WHERE users_groups.group_id = 5
Другие вопросы по тегам