2014-07-18 72 views
0

我正在使用SQLite進行培訓,我試圖達到與在USDA中實施的搜索結果相同的結果。瞭解SQLite查詢

USDA food list search如果我搜索「雞胸烤熟」搜索結果56條結果。 我無法弄清楚這種模式。使用相同的數據庫,如果我使用以下查詢:

SELECT * 
    FROM FOODDATA 
WHERE FOODDES LIKE '%chicken%' OR FOODDES LIKE '%breast%' OR FOODDES LIKE '%cooked%' OR FOODDES LIKE '%roasted%'; 

它給了我超過2000個結果。對我來說這是有道理的。使用AND替換OR只會給我2個結果。再一次,這是有道理的。

USDA正在進行什麼樣的查詢?

+2

他們可能會使用全文搜索:http://en.wikipedia.org/wiki/Full_text_search – Milen

+0

你有沒有包含該網站擁有所有數據的數據庫? –

+0

一些結果似乎指的是'火雞胸部烤熟',所以這看起來不像一個簡單的SQL查詢。他們可能正在尋找4個關鍵詞中的3個,或者他們可能有其他選擇(例如使用火雞而不是雞) – sgmoore

回答

1

你可以調查匹配使用這種查詢的關鍵字數量:

SELECT ((FOODDES LIKE '%chicken%') + 
     (FOODDES LIKE '%breast%') + 
     (FOODDES LIKE '%cooked%') 
     (FOODDES LIKE '%roasted%') 
     ) as NumMatches, count(*), min(fooddes), max(fooddes) 
FROM FOODDATA 
GROUP BY (FOODDES LIKE '%chicken%') + 
     (FOODDES LIKE '%breast%') + 
     (FOODDES LIKE '%cooked%') 
     (FOODDES LIKE '%roasted%') 
ORDER BY NumMatches desc; 

這個查詢只是計數匹配並給予FOODDATA行數有4場比賽,3場比賽的關鍵字數量, 等等。

+0

謝謝。沒有完全理解你做了什麼,但相應地這個http://i.imgur.com/rTXOX1S.png?1他們結合3和4項搜索。對? – Favolas

-1

使用AND代替OR

SELECT * 
    FROM FOODDATA 
WHERE FOODDES LIKE '%chicken%' AND FOODDES LIKE '%breast%' AND FOODDES LIKE '%cooked%' AND FOODDES LIKE '%roasted%'; 

而且個性外殼可能導致的差異。您只需查看小寫字母,並注意,他們的許多結果以Chicken開頭,並帶有大寫字母。將大寫情況添加到AND條件並查看結果。

此外,SQLite的全文搜索擴展非常適合這種查詢(即查詢您在哪裏查找更長文本中的某些單詞)。 LIKE非常慢(至於數據庫的速度有多快)。

+1

這個問題已經說過,AND'只給出兩個結果;而LIKE不區分大小寫。 –

+0

@CL:我沒有回答這個問題。另外,@Favolas沒有用'AND'得到正確答案的事實是他沒有涵蓋所有必要的情況,並不是因爲AND'是一個錯誤的選擇。 – Googie

1

試着這麼做

select 
(FOODDES LIKE '%chicken%') + (FOODDES LIKE '%breast%') + (FOODDES LIKE '%cooked%') + (FOODDES LIKE '%roasted%') As matches , 
FOODDES 
from 
(
    SELECT FOODDES 
    FROM FOODDATA 
    WHERE FOODDES LIKE '%chicken%' or FOODDES LIKE '%breast%' or FOODDES LIKE '%cooked%' or FOODDES LIKE '%roasted%' 
) table1 
    where matches >=3 
    order by matches desc 
+0

謝謝,但得到這個:執行查詢時出錯:沒有這樣的列:.FOODDES – Favolas

+0

如果FOODDES是你的列名,那麼我認爲這應該工作。 (見http://sqlfiddle.com/#!7/1ac109/1/0) – sgmoore

+0

它來自我正在使用的程序。 – Favolas