Использование Mysql IN

0

Я храню в столбце список идентификаторов категории, разделенных запятыми:

Например: 1,2,3,4,5,6,7,8.. и т.д., только их идентификаторы.

Затем я делаю запрос, чтобы получить все строки, которые имеют категорию с идентификатором 2,3, и работает, когда в списке пакетов есть несколько элементов.

Это запрос и таблица:

mysql> select *  from packages where category_id IN (2,3);

Любое решение, чтобы получить полный список пакетов, содержащий идентификатор ctegory, либо 2 или 3.

Теги:

2 ответа

0

Плохая идея для де-нормализации

Вы должны нормализовать данные

Одно из возможных решений для этого

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 - остерегайтесь производительности

0

Это должно ответить на ваш вопрос:

select * from packages where category_id LIKE "2" or category_id LIKE "3";

Однако лучше денормализовать данные.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню