Проблема с вашим запросом состоит в том, что он неправильно совпал бы '1'
с таким списком, как, например, '45,12,5'
.
Один из способов - добавить запятые на обоих концах перед поиском:
where concat(',', `group`, ',') like '%,1,%';
Но в MySQL гораздо удобнее использовать строковую функцию find_in_set()
, целью которой является именно то, что вы ищете, ie искать значение в запятой разделенный список:
select id from cars where find_in_set('1', `group`) > 0
Примечания:
вы должны исправить свою модель данных и иметь отдельную таблицу для хранения отношений между id
s и group
s, с каждым кортежем в отдельном ряду. Связанное чтение: Действительно ли плохо хранить список с разделителями в столбце базы данных?
group
- зарезервированное слово в MySQL, так что не очень хорошо выбор имени столбца (вам нужно будет заключать его в кавычки при каждом использовании, что подвержено ошибкам)