Я храню в столбце список идентификаторов категории, разделенных запятыми:
Например: 1,2,3,4,5,6,7,8.. и т.д., только их идентификаторы.
Затем я делаю запрос, чтобы получить все строки, которые имеют категорию с идентификатором 2,3, и работает, когда в списке пакетов есть несколько элементов.
Это запрос и таблица:
mysql> select * from packages where category_id IN (2,3);
Любое решение, чтобы получить полный список пакетов, содержащий идентификатор ctegory, либо 2 или 3.
Плохая идея для де-нормализации
Вы должны нормализовать данные
Одно из возможных решений для этого
mysql> create table the_in ( expr varchar(255)); Query OK, 0 rows affected (0.00 sec) mysql> insert into the_in values('1,2'); Query OK, 1 row affected (0.00 sec) mysql> create table some_table ( id int(10)); Query OK, 0 rows affected (0.00 sec) mysql> insert into some_table values (1), (2), (3), (4); Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> select * from some_table where find_in_set(id, (select expr from the_in)); +------+ | id | +------+ | 1 | | 2 | +------+ 2 rows in set (0.00 sec)
find_in_set
- остерегайтесь производительности
Это должно ответить на ваш вопрос:
select * from packages where category_id LIKE "2" or category_id LIKE "3";
Однако лучше денормализовать данные.