par
alexxxxx » 04 janv. 2012, 00:07
Bonjour,
Je cherche à faire une recherche de texte sur les titres du livre (une trentaine de caractères maximum). Je procède en gros comme cela :
req="(SELECT a.title, a.subtitle, a.author FROM Book a WHERE ";
$words = explode(' ', $params['search']);
$num_words = count($words);
for ($i = 0; $i<$num_words; $i++) {
$req .= 'title LIKE :word'.$i.'';
if (($i + 1) != $num_words) {
$req .= " AND ";
}
}
$req.=')';
for ($i = 0; $i < $num_words; $i++) {
$reponse_count->bindValue(':word'.$i.'', "%" . $words[$i] . "%");
}
Après quelques lectures sur le net j'ai appris qu'il n'était pas très recommandé de faire des requêtes du genre car peu optimisé.
Je me suis inspiré de ça :
http://www.grafactory.net/blog/post/200 ... avec-Mysql pour faire une recherche fulltext sur une autre table que j'appelle "text_search" de type MyIsam mais je n'arrive pas a transformer ma requête pour qu'elle marche. Je pensais à quelque chose comme ça :
req="(SELECT a.title, a.subtitle, a.author FROM Book a INNER JOIN text_search s ON a.ID=s.ID WHERE CONTAINS(s.title, ";
$req .= ':word'.$i.'';
if (($i + 1) != $num_words) {
$req .= " and ";
}
}
for ($i = 0; $i < $num_words; $i++) {
$reponse_count->bindValue(':word'.$i.'', $words[$i]);
}
Ce n'est pas bon mais je ne sais pas comment faire. Quelqu'un pour m'aiguiller? Merci
