2011-08-10 3 views
3

http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/에 나와있는 저장 프로 시저를 사용하여 MySQL의 substring() 함수를 사용하여 문자열의 각 단어를 가져옵니다. 내가 원했던 것은 문장 (Sentences) 테이블의 모든 행에 나타나는 모든 단어를 반환하는 다음 쿼리에 대한 것입니다. 현재, 1, 2, 3 등의 위치를 ​​걸러 내야합니다.하지만 문장이 얼마나 많은 단어인지 모르기 때문에 매우 비효율적입니다. 하나의 검색어로 모든 문장의 모든 단어를 얻는 방법에 대한 아이디어가 있습니까? 예를 들어모든 행의 모든 ​​단어를 반환하는 MySQL 분할 문자열

SELECT DISTINCT SPLIT_STR(`SentenceText`, " ", 1) AS Word FROM `Sentences`; 

:

this 
is 
a 
sentence 
galore 
+0

PHP에서'explode' 함수를 찾고 있습니까? (http://php.net/manual/en/function.explode.php)? – ajreal

+0

@ajreal - ASP.NET을 사용하고 있습니다. – carlbenson

+0

당신은'explode'를 통해 결과를보고 있는데, 쿼리는 각 행에 단어가 들어있는 몇 개의 행을 반환 할 것입니까? – ajreal

답변

0

당신은 모든 얻을 수있는 GROUP_CONCAT 기능을 사용해야합니다

this is a sentence 
sentence galore 

내가 반환하는 단일 쿼리를 원하는 : 이 문장은 2 행 포함 된 경우 한 줄에 문장 :

그런 다음 문장을 토큰 화하고 임시 테이블에 토큰을 삽입 한 다음 거기에서 선택을 수행해야합니다. Here은 좋은 예입니다. (필자가 원하는 것 같습니다.) 행운을 빕니다!

(때문에 downvotes의) 업데이트 : 어쩌면 내 대답의 문제는 그 단일 쿼리되지이지만, 세 단계 과정 :

  1. 는 하나 개의 문자열에있는 모든 문장을 가져 오기 (GROUP_CONCAT를 사용하여 함수)
  2. 이 문자열을 프로 시저에 전달합니다 (이 절차의 좋은 예에 대한 링크를 넣어 두었습니다. & 여기에 붙여 넣기를하면 값이 추가되지 않습니다). 문자열을 토큰 화하고 각 문자열을 테이블, 어쩌면 임시 테이블 (WORDS라고 부름).
  3. 나는이 단계는 새 저장 프로 시저에서이 세 단계를 넣으면

    , 당신이 할 수있는 (안 하나의 단일 쿼리 만) 원하는 결과를 얻을 생각

처럼 간단한 선택 실행 그것에 하나의 쿼리를하십시오.

downvote로 가려면 적어도 왜 downvoting하는지 설명하는 시간이 필요합니다 (질문과 대답을 읽을 시간을 가졌으므로).

+1

예제가 너무 복잡하여 다운 ... –

관련 문제