我正在使用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个结果。再一次,它是有道理的。
美国农业部的表现是什么样的?
答案 0 :(得分: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个匹配项等的行数。
答案 1 :(得分: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
答案 2 :(得分:-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
非常慢(至于数据库的速度有多快)。