2014-07-18 3 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 개 이상의 결과를 제공합니다. 나를 위해 말이된다. OR 대신 AND을 사용하면 결과가 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; 
이 쿼리는 단지 일치 4 경기, 3 경기를 가질 수 FOODDATA의 행 수를 줄 키워드의 수를 계산

, 등등.

+0

감사합니다. 자신이 한 일을 완전히 이해하지 못했지만 http://i.imgur.com/rTXOX1S.png?1에 따라 3 일과 4 일 검색어를 결합합니다. 권리? – Favolas

-1

대신 사용 ORAND :

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