对于以下两个表
sql = "SELECT * FROM vacation LEFT JOIN user ua ON vacation_user = ua.user_id LEFT JOIN user ub ON vacation_granted_id = ub.user_id WHERE 1"
Set RS = Cn.Execute(sql)
uname = RS("ua.user_name")
gname = RS("ub.user_name")
和
+-----------+-----------+
| recipe_id | some_data |
+-----------+-----------+
| 1 | etc |
| 2 | etc |
+-----------+-----------+
我希望根据一系列食材选择最匹配的食谱。
例如,如果我要查询“牛奶,鸡蛋,盐”,我将获得recipe_id 1作为第一个结果(因为它有2个匹配项),但是如果我搜索“牛奶”,则将1或3作为第一个答案等效。
我目前的工作无法找到“最佳”选项,而是通过将每个配方的不同成分相交而只能找到“全有或全无”(ing_id_1_input是用户的输入):
+----------------+-----------+
| ingredients_id | recipe_id |
+----------------+-----------+
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 3 |
+----------------+-----------+
答案 0 :(得分:1)
您将执行以下操作:
select i.recipe_id
from ingredients i
where i.ingredient_name in ('milk', 'egg', 'salt')
group by i.recipe_id
order by count(*) desc;
答案 1 :(得分:1)
也许可行:
select r.*, (select count(*)
from ingredients as i1 where i1.recipe_id = r.recipe_id)
- (select count(*)
from ingredients as i1 where ingredient_name in (input1,input2,input3)
and i1.recipe_id = r.recipe_id)
as missing
from recipe r
order by missing
input1,input2,input3是3种可用成分。此列表的长度可以可变。
最后一列包含缺少的成分数,如果所有成分均可用,则为0。因此,在此列上进行排序将把最小值放在顶部。