我有这张桌子
file_id cat_1 cat_2 cat_3
cat1
,cat2
,cat3
都包含类别ID
我想选择存在于IN cat1
或cat2
或cat3
简单查询是:
SELECT file_id FROM files WHERE
cat_1 IN (1,2,3,4,5)
OR cat_2 IN (1,2,3,4,5)
OR cat_3 IN (1,2,3,4,5)
不是更好的方法吗?例如,将所有列放在另一个列表中?
WHERE (cat_1,cat_2,cat_3) IN (1,2,3,4,5) ?
答案 0 :(得分:2)
更好的数据库设计
files table
-----------
id
name
...
categories table
----------------
id
name
...
file_categories table
---------------------
file_id
category_id
通过这种方式,您可以根据需要为每个文件存储多个类别。要获取特定类别的所有文件,您可以
select f.*
from files f
join file_categories fc on fc.file_id = f.id
join categories c on fc.category_id = c.id
where c.name = 'cat 1'
或者如果您已经有category_id
的列表,那么请执行
select f.*
from files f
join file_categories fc on fc.file_id = f.id
where fc.category_id in (1,2,3,4,5)