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

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

0 голосов
/ 13 января 2011

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

Вот так: 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 голосов
/ 13 января 2011

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

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

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

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 голосов
/ 13 января 2011

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

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

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

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