MYSQL выбрать все записи, если содержит указанный c номер - PullRequest
0 голосов
/ 06 апреля 2020

У меня небольшая проблема, у меня есть такая таблица:

id|name|group|date_created
1|Volvo|1,3|06-04-2020 10:00:00
2|Audi|3|06-04-2020 10:00:00

et c ....

Теперь я могу sh Я мог бы получить все записи со значением 1 внутри столбца группы.

Я пробовал LIKE "% 1%", но не думаю, что это хороший запрос. Вы можете обратиться ко мне?

SELECT id FROM cars WHERE group LIKE '%1%' 

1 Ответ

3 голосов
/ 06 апреля 2020

Проблема с вашим запросом состоит в том, что он неправильно совпал бы '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, так что не очень хорошо выбор имени столбца (вам нужно будет заключать его в кавычки при каждом использовании, что подвержено ошибкам) ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...