MySQL выбрать данные из многозначного атрибута
Как выполнить запрос на выборку для многозначного атрибута? Есть ли в MySQL функция выбора определенных данных из многозначного поля? Большая помощь приветствуется. Вот пример проблемы:
Таблица
userid groups
-------------------
2 2,3,5
4 1
9 2,5,10
тип данных char(250)
за groups
Я хочу сделать запрос, чтобы выбрать все userid
s, которые принадлежат к группе 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