2015-04-12 91 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)