我正在研究高级搜索功能,人们可以使用高级搜索搜索食谱。 为此,我有这些数据库结构,
1)食谱
id title
1 banana
2 orange
2)filter_main_category
id name
1 ingredients
2 restrictions
3 cuisines
4 meal_type
第3)sub_cat
id name
1 bread
2 breakfast
3 dinner
4 banana
5 butter
6 eggs
4)的关系
id recipe_id main_category_id sub_cat_id
1 1 4 4
2 1 4 6
3 1 2 6
因此,根据表格,您可以看到recipe_id
1有3个过滤器
其中两个main_category_id
4,另一个main_category_id
2。
现在,如果用户提前选择main_category_id
= 4和sub_cat_id = 4,6,那么我们就这样显示结果,
SELECT * FROM relations WHERE main_category_id = 4 AND sub_cat_id IN (4,6)
输出:
id recipe_id main_category_id sub_cat_id
1 1 4 4
2 1 4 6
现在,如果用户还从高级过滤器中选择main_category_id
= 2和sub_cat_id
= 6(main_category_id = 2用于限制,那么如果用户选择此过滤器,我们必须从搜索结果中删除配方) ,那么我们必须从输出中删除最后一条记录(因为main_category_id = 2所以我们必须从搜索中限制子类别)
对于我正在尝试的是,
SELECT * FROM relations WHERE (main_category_id = 4 AND sub_cat_id IN (4,6)) AND ( main_category_id = 2 AND sub_cat_id NOT IN (6) )
但它返回了错误的结果,
我应该在输出中想要什么
id recipe_id main_category_id sub_cat_id
1 1 4 4
有这样的解决办法吗?