2011-01-13 2 views
0

배열이 데이터베이스에 얼마나 많이 들어 있는지 알고 싶습니다. 그것의 꽤 느린 나는 for 루프없이 여러 단어 또는 전체 배열처럼 검색하는 방법이 있는지 알고 싶습니다. 나는 잠시 동안 고뇌하고 있습니다.단어 배열 검색이 더 빠릅니다.

여기 내 코드 도움을

$dateBegin = "2010-12-07 15:54:24.0"; 
$dateEnd = "2010-12-30 18:19:52.0"; 
$textPerson = " text text text text text text text text text text text text text text "; 



$textPersonExplode = explode(" ", $textPerson); 



$db = dbConnect(); 
for ($counter = 0;$counter <= sizeof($textPersonExplode)-1 ; $counter++) { 


$query = "SELECT count(word) FROM `news_google_split` WHERE `word` LIKE '$textPersonExplode[$counter]' AND `date` >= '$dateBegin' AND `date` <= '$dateEnd'"; 

$result = mysql_query($query) or die(mysql_error()); 



while($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
$word[] = $textPersonExplode[$counter]; 
$count[] = $row[0]; 



} 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 
} 

감사합니다.

답변

0

쿼리에서 MATCH..AGAINST 쌍을 사용하면 for 루프를 피할 수 있습니다. 즉 :

$query = "SELECT count(word) FROM `news_google_split` WHERE MATCH(`word`) AGAINST 
('$textPerson') AND `date` >= '$dateBegin' AND `date` <= '$dateEnd'"; 
+0

예, 작동하지만 아직 조금 느립니다. 그러나 3 분을 기다리는 것보다 낫습니다. – Martijn

+0

전체 텍스트 색인을 정의 했습니까? – Chandu

+0

나는 seperatly에서 보내는 각 단어의 정보를 얻을 수 있을까요? 이제 그것은 입력의 합계입니다. – Martijn

0

체크 아웃 full text indexing.

+0

나는 그걸 이미 살펴 봤지만 제대로 작동하지는 못했습니다. 그럼 내가 어떻게 질의를해야합니까? – Martijn

+0

MATCH ... AGAINST 구문을 사용하십시오. 'SELECT headline, story FROM news 어디에서 (헤드 라인, 스토리) AGAINST ('허리케인'); '테이블은 MyISAM이어야합니다. – keithjgrant

0

우리는 DB에 쉼표로 분리 된 목록을 보내 후, 테이블에 그 목록을 변환 우리는의 조인 형태로 우리의 쿼리에서 해당 테이블을 사용했다.

그러나 쿼리 또는 저장 프로 시저의 입력으로 전달할 수있는 데이터의 양을 확인해야합니다.

관련 문제