Запрос на совпадение в MySQL ListOfValues
Вопрос
Каков наилучший способ запросить MySQL, когда я хочу, чтобы запрос возвращал все строки, где хотя бы одно значение в списке значений соответствует хотя бы одному значению в списке значений?
пример
Если моя таблица содержит следующие строки:
name groups
item1 gr1, gr2
item2 gr1,gr2,gr3
item3 gr1,gr3
И у меня есть список значений:"gr3, gr4, gr5"
Я хочу найти все строки в моей таблице, которые имеют хотя бы одно из значений gr3, gr4 или gr5 в поле groups.
Таким образом, запрос в этом случае должен возвращать item2 и item3
Как я могу создать эффективный запрос без зацикливания в моем скрипте?
Решение
Лично я бы предположил, что это не лучший способ структурировать вашу базу данных.У меня была бы таблица ссылок, что-то вроде item_groups, которая содержала бы одну строку для каждой ссылки на группу элементов, так что у вас там было бы:
item_name group_name
item1 gr1
item1 gr2
item2 gr1
item2 gr2
item2 gr3
item3 gr1
item3 gr3
Таким образом, вы можете просто сделать
SELECT item_name FROM item_groups WHERE group_name IN ('gr3','gr4','gr5');
Это то, чему меня научили, когда я изучал теорию баз данных в рамках своей программы бакалавриата, и хотя в результате получается больше таблиц, это значительно ускоряет и упрощает поиск.HTH