Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解SQLite查询_Sql_Sqlite - Fatal编程技术网

理解SQLite查询

理解SQLite查询,sql,sqlite,Sql,Sqlite,我正在使用SQLite进行培训,我正试图获得与美国农业部实施的搜索结果相同的结果 在如果我搜索“鸡胸肉熟烤”的搜索结果56个结果。 很抱歉,我想不出这个模式。使用与它们相同的数据库,如果我使用以下查询: SELECT * FROM FOODDATA WHERE FOODDES LIKE '%chicken%' OR FOODDES LIKE '%breast%' OR FOODDES LIKE '%cooked%' OR FOODDES LIKE '%roasted%'; 它给了我200

我正在使用SQLite进行培训,我正试图获得与美国农业部实施的搜索结果相同的结果

在如果我搜索“鸡胸肉熟烤”的搜索结果56个结果。 很抱歉,我想不出这个模式。使用与它们相同的数据库,如果我使用以下查询:

SELECT *
  FROM FOODDATA
 WHERE FOODDES LIKE '%chicken%' OR FOODDES LIKE '%breast%' OR FOODDES LIKE '%cooked%' OR FOODDES LIKE '%roasted%';
它给了我2000多个结果。对我来说,这是有道理的。使用
替换
只能得到2个结果。再一次,这是有道理的


美国农业部正在执行何种查询?

使用
而不是

SELECT *
  FROM FOODDATA
 WHERE FOODDES LIKE '%chicken%' AND FOODDES LIKE '%breast%' AND FOODDES LIKE '%cooked%' AND FOODDES LIKE '%roasted%';
字符大小写也可能导致差异。您只查找小写单词,请注意,它们的许多结果都以
Chicken
开头,并以大写字母开头。将大写字母添加到
条件中,然后查看结果


此外,SQLite的全文搜索扩展非常适合此类查询(即在较长文本中查找某些单词的查询)。像
这样的
非常慢(数据库有多快)。

您可以使用此查询调查关键字的匹配数:

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个匹配项的行数,依此类推。

请尝试类似的操作

 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

他们可能在使用全文搜索:你有一个包含该网站所有数据的数据库吗?有些结果似乎是指“火鸡胸脯烤熟”,所以这看起来不像一个简单的SQL查询。他们可能在寻找4个关键词中的3个,或者他们可能有其他选择(比如用火鸡代替鸡肉)@LasseV.Karlsen Yes。它们为用户提供数据库文件download@sgmoore我注意到了。这让我想到,除了简单的SQL搜索,还有其他一些模式。问题已经说明,
只给出两个结果;LIKE不区分大小写。@CL:当我回答这个问题时,它不区分大小写。另外,@Favolas在
中没有得到正确答案的事实是,他没有涵盖所有必要的案例,这并不是因为
是一个错误的选择。谢谢。没有完全理解您所做的,但相应地,他们将3和4个术语搜索结合起来。对吗?谢谢,但执行查询时出现以下错误:没有这样的列:。FOODDES如果FOODDES是您的列名,那么我认为这应该可以工作。(请看)它来自我使用的程序。