2014-07-18 70 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