$rows
aura les données où votre mot-clé code
correspondances dans votre tableau, vous pouvez réécrire votre code pour qu'il corresponde aux deux mots clés sous la forme
$keyword = 'hello code';
$exloded = explode(' ', $keyword);
$query = 'SELECT * FROM A ';
$i = 0;
$params = array();
foreach ($exploded as $value):
if ($i == 0) {
$query .= ' WHERE `text` LIKE :value_'.$i;
} else {
$query .= ' OR `text` LIKE :value_'.$i;
}
$params[':value_'.$i] = '%'.$value .'%';
$i++;
endforeach;
$sth = $db->query($query);
$sth->execute($params);
$rows = $sth->fetchAll();
echo '<pre>';print_r($rows);echo '</pre>';
'; Créez votre requête en boucle (sur vos mots clés fournis) et attribuez des espaces réservés uniques dans la requête pour correspondre à toutes les valeurs
Modifier pour la recherche plein texte
En utilisant la recherche en texte intégral, vous pouvez faire correspondre exactement la même phrase avec le mot-clé fourni. Pour travailler avec la recherche en texte intégral, vous avez besoin d'un index de type FULLTEXT
.
ALTER TABLE `A` ADD FULLTEXT INDEX `fulltextindex` (`text`);
Et la requête ressemblera à
$keyword = 'hello code';
$exloded = explode(' ', $keyword);
$where = '';
$i = 0;
$select = array();
$params = array();
foreach ($exploded as $value):
$select[]= ' MATCH(`text`) AGAINST(:value_'.$i.' IN BOOLEAN MODE) ';
if ($i == 0) {
$where .= ' WHERE MATCH(`text`) AGAINST(:value_'.$i.' IN BOOLEAN MODE)';
} else {
$where .= ' OR MATCH(`text`) AGAINST(:value_'.$i.' IN BOOLEAN MODE)';
}
$params[':value_'.$i] = $value ;
$i++;
endforeach;
$query ='SELECT *,'. implode( ' + ',$select).' AS score FROM A '.$where.' ORDER BY score DESC';
$sth = $db->query($query);
$sth->execute($params);
$rows = $sth->fetchAll();
echo '<pre>';print_r($rows);echo '</pre>';
'; Le code ci-dessus produira une requête comme
SELECT *,
MATCH(`text`) AGAINST('hello' IN BOOLEAN MODE)
+
MATCH(`text`) AGAINST('code' IN BOOLEAN MODE) AS score
FROM A
WHERE MATCH(`text`) AGAINST('hello' IN BOOLEAN MODE)
OR MATCH(`text`) AGAINST('code' IN BOOLEAN MODE)
ORDER BY score DESC
Alias score
dans la requête ci-dessus aura une valeur pour chaque ligne et son score correspondant, vous pouvez donc ordonner votre résultat de manière décroissante pour afficher en premier les enregistrements qui ont le score le plus élevé.