in
работы по списках значений, а не одно значение строки. Итак, если у вас есть такая ценность val in ('1,2,3')
является asme как val = '1,2,3'
.
Сохранение нескольких значений в одном столбце плохая идея по многим причинам:
- строковые функции MySQL, не особенно сильны.
- Целые числа должны храниться как числа, а не строки.
- Столбец должен содержать только одно значение.
- Внешние отношения должны быть правильно определены.
- Запросы с использованием столбца «список в строке» не могут использовать индексы.
Правильное решение представляет собой отдельную таблицу, называемую соединительной таблицей.
Иногда, увы, мы придерживаемся плохих проектных решений других людей.
Если да, то вы можете использовать find_in_set()
:
SELECT u.*
FROM user u
WHERE EXISTS (SELECT 1 FROM user u2 WHERE u2.id = 1 AND find_in_set(u.id, u2.manage) > 0);
Примечание: Это предполагает, что строка запятыми без пробелов и кавычек. Возможно, вам понадобится использовать replace()
, чтобы получить строку в нужном формате.
Можете ли вы предоставить схему для 'user' (даже если это просто идентификатор и управление)? Похоже, что 'manage' является строковым столбцом, который содержит« 2,3,4,5,6 ». – joncloud
Поскольку пользователь 'id', который является целым числом, например' 2', не равен строкам ''' '2', '3', '4', '5', '6'" '. – zerkms
@ joncloud yea именно 'manage' - это просто строка, содержащая' id', которую пользователь управляет (роль системы) –