關閉我的頭頂,這裏有些問題,我可以看到,將拿出通過字符串匹配?:
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