关闭我的头顶,这里有些问题,我可以看到,将拿出通过字符串匹配?:
3 Avocados
和2 Avocados
都使用鳄梨,但字符串不匹配。
1 tbsp salt
和15ml salt
指盐的量相同,但字符串不匹配。
您可能希望保留一个配方成分表,该表还存储标准化量(即,在放入数据库之前,所有东西都会被转换成特定的单位)。我正在做的假设,在这里,你已经有recipes
表和表ingredients
,两者在此用作外键(使之成为一个连接表)
CREATE TABLE recipe_ingredients (
recipe_id INT NOT NULL,
ingredient_id INT NOT NULL,
quantity DECIMAL NOT NULL,
PRIMARY KEY (recipe_id, ingredient_id),
FOREIGN KEY recipe_id REFERENCES recipes (id),
FOREIGN KEY ingredient_id REFERENCES ingredient (id)
)
然后决定比赛的时候,你可以用确定哪些配方包含你正在寻找最成分(这忽略数量):
SELECT ri.recipe_id, COUNT(ri.ingredient_id) AS num_common_ingredients
FROM ingredients AS i
RIGHT JOIN recipe_ingredients AS ri
ON ri.ingredient_id = i.id
WHERE i.id IN (?) -- list of ingredient IDs being searched for
GROUP BY ri.recipe_id
ORDER BY COUNT(ri.ingredient_id) DESC
最高COUNT
行具有最相似(因为这意味着是最大的共同点redients)。
要确定数量之间的相似性,一旦您的配方与大多数配料匹配,您可以比较给定的数量与recipe_ingredients
中指定的数量。
理想情况下,我会喜欢它有它像全文搜索返回一个分数;如果我把所有的成分放到一个blob中,这可能仍然有效,但它不会准确地进行差异化。 – Typhon 2010-10-14 17:11:18