Вопрос

Каков наилучший способ запросить 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top