2015-04-12 45 views
2

搜索多个列和多值选择行我有这个表通过在MySQL

file_id cat_1 cat_2 cat_3 

cat1cat2cat3所有包含类别ID。
我要选择存在于cat1cat2cat3

简单查询文件是:

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) ? 
+4

有一种更好的方式来做到这一点。它被称为标准化数据,所以你有一个联结表,每个类别和文件有一行。 –

回答

2

更好的DB设计是

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)