2011-12-05 100 views
0

我有一個數據庫,配方表,看起來像SQL查詢涉及正則表達式

'pepper :1 \n tomato :2 \n salt :half a spoon' 

'egg :1 \n tomato :1 \n potato :5' 

'rice :100 gram \n oil :1 spoon' 

現在,我想形成select語句它根據給定的成分選擇元組,例如,如果我選擇'番茄'和'馬鈴薯',它應該返回大部分成分的配方(所以從上面的例子應該是元組2和1,正好按照這個順序)。如果有更多的元組具有相同數量的匹配,則查詢應根據匹配數除以ingNo來對元組進行排序。如何在SQL中它?

+2

儘管您可能可以做到這一點,但最終您會在這裏面朝錯誤的方向前進。真正的問題是成分應該是與食譜表相關的單獨表格,並且具有多對一的關係。 –

回答

3

您需要重新設計您的數據庫。使用兩個表格。一個是配方。第二個參考配方,包含一個成分和一個測量。

recipe 
    - irrelevant fields 
ingredient 
    - recipeID 
    - name 
    - measurement 
+0

度量也應該是一個單獨的表格 - 考慮與另一個具有各種值(每茶匙,盎司,杯子等)的UnitOfMeasure表相關的數字「數量」字段和「UnitOfMeasureID」。 –

+0

謝謝,那真是一件壞事設計確實。 – kyooryu

+0

@Eric,真的,衡量可能更好,作爲一個單獨的表 – Nik

1

你可以使用UNION查詢:

select recipe from sometable where ingredients LIKE '%tomato%' 
UNION 
select recipe from sometable where ingredients LIKE '%potato%'; 

然後還有一些特有的數據庫引擎,你也可以考慮一些全文的選項。

+0

這不是一個可擴展的解決方案。這將適用於兩種成分,但您需要重新編寫三種成分的查詢等。 – Nik

相關問題