2011-01-13 4 views
0

Je veux regarder combien un tableau vient dans une base de données. C'est assez lent et je veux savoir s'il y a un moyen de chercher comme des mots multiples ou un tableau entier sans boucle for .. Je me bats depuis un moment maintenant.recherche de tableau de mots plus rapidement

voici mon code

$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()); 
} 
} 

merci pour l'aide.

Répondre

0

Vous pouvez éviter la boucle for si vous utilisez la paire MATCH..AGAINST dans votre requête. i.e.:

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

Oui, cela fonctionne, mais c'est encore un peu lent. Mais ce sera mieux que d'attendre 3 minutes. – Martijn

+0

Avez-vous défini l'index du texte intégral? – Chandu

+0

Pourrais-je obtenir l'information de chaque mot que j'envoie séparément? Maintenant, c'est le total de l'entrée. – Martijn

0

Découvrez full text indexing.

+0

J'ai déjà examiné cela, mais je ne pouvais pas le faire fonctionner correctement. Comment dois-je faire la requête alors? – Martijn

+0

Utilisez la syntaxe MATCH ... AGAINST. 'SELECT titre, histoire de nouvelles O MAT MATCH (titre, histoire) CONTRE (« Hurricane »);' Notez également que la table doit être MyISAM. – keithjgrant

0

Nous envoyons une virgule liste dans Db seperated, puis converti cette liste dans une table, puis nous avons utilisé cette table dans nos requêtes sous forme de jointures.

Toutefois, vous devez vous assurer du nombre de données que vous pouvez transmettre en tant qu'entrée de la requête ou de la procédure stockée.

Questions connexes