通过在MySQL中搜索多个列和多个值来选择行

时间:2015-04-12 15:49:55

标签: mysql sql

我有这张桌子

file_id    cat_1    cat_2    cat_3

cat1cat2cat3都包含类别ID 我想选择存在于IN 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) ?

1 个答案:

答案 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)