търсене на масив от думи по-бързо

искам да видя колко масив идва в база данни. Доста е бавен и искам да знам дали има начин за търсене като няколко думи или цял масив без 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());
}
}

Благодаря за помощта.


person Martijn    schedule 13.01.2011    source източник


Отговори (3)


Можете да избегнете цикъла for, ако използвате двойка MATCH..AGAINST във вашата заявка. т.е.:

    $query = "SELECT count(word) FROM `news_google_split`  WHERE MATCH(`word`) AGAINST   
('$textPerson')   AND  `date` >= '$dateBegin' AND `date` <= '$dateEnd'"; 
person Chandu    schedule 13.01.2011
comment
Да, това работи, но все още е малко бавно. Но ще е по-добре, отколкото да чакате 3 минути. - person Martijn; 14.01.2011
comment
Определихте ли индекса на пълния текст? - person Chandu; 14.01.2011
comment
Мога ли да получа информацията за всяка дума, която изпращам отделно? Сега това е общата сума на входа. - person Martijn; 14.01.2011
comment
Да, дефинирах индекса на пълния текст. Това е индекс от повече от 2 милиона думи. - person Martijn; 14.01.2011
comment
Опитайте това: SELECT word, count(word) FROM news_google_split WHERE MATCH(word) AGAINST ('$textPerson') AND date ›= '$dateBegin' AND date ‹= '$dateEnd' GROUP BY word - person Chandu; 14.01.2011

Вижте индексиране на пълен текст.

person keithjgrant    schedule 13.01.2011
comment
Вече разгледах това, но не можах да го накарам да работи правилно. Как трябва да направя запитването тогава? - person Martijn; 14.01.2011
comment
Използвайте синтаксиса MATCH...AGAINST. SELECT headline, story FROM news WHERE MATCH (headline,story) AGAINST ('Hurricane'); Също така имайте предвид, че таблицата трябва да е MyISAM. - person keithjgrant; 14.01.2011

Изпращаме списък, разделен със запетая, в Db, след което преобразуваме този списък в таблица, след което използваме тази таблица в нашите заявки под формата на съединения.

Трябва обаче да сте сигурни колко данни можете да подадете като вход на заявката или съхранената процедура.

person Nitin Midha    schedule 13.01.2011