il y a dans la table les champs titre adresse description et je veux mettre en premier les sites qui ont le mot dans les 3 champs
en decond ceux qui ont le mot dans 2 champs
en dernier ceux qui ont le mot dans un champ
et je veux récupérer le nomnre derésultats
Je débute et je ne sais pas comment il est possible d'optimiser
avec 500 000 sites cela met 10s pour une recherche
j'imagine que quand il y aura 3 millions de sites j'aurai le temps d'aller faire un café
Si vous avez une idée
$sql_entete = "SELECT * FROM site WHERE 1=1 ";
$sql_entete_compteur = "SELECT * FROM site WHERE 1=1 ";
$sql = "";
// si requete la plus selective = vide alors faire la moins restrictive seulement
foreach($recherche as $val_recherche) {
$sql.=" and (adresse LIKE '%$val_recherche%' AND titre LIKE '% $val_recherche %' AND description LIKE '% $val_recherche %') ";
}
$sql.=" LIMIT ".PAGE*$nbrpp.",".$nbrpp; //nbpp nbr sites par page
$sql.=" UNION SELECT * FROM site WHERE 1=1 ";
foreach($recherche as $val_recherche) {
$sql.=" and ( adresse LIKE '% $val_recherche%' AND (titre LIKE '% $val_recherche %' OR description LIKE '% $val_recherche %')) ";
}
$sql.=" LIMIT ".PAGE*$nbrpp.",".$nbrpp; //nbpp nbr sites par page
$sql.=" UNION SELECT * FROM site WHERE 1=1 ";
foreach($recherche as $val_recherche) {
$sql.=" and ( description LIKE '% $val_recherche %' AND titre LIKE '%$val_recherche%') ";
}
$sql.=" LIMIT ".PAGE*$nbrpp.",".$nbrpp; //nbpp nbr sites par page
$sql.=" UNION SELECT * FROM site WHERE 1=1 ";
foreach($recherche as $val_recherche) {
$sql.=" and ( description LIKE '% $val_recherche %' OR titre LIKE '% $val_recherche %' OR adresse LIKE '%$val_recherche%' ) ";
}
$sql_compteur= $sql;
$sql.=" LIMIT ".PAGE*$nbrpp.",".$nbrpp; //nbpp nbr sites par page
/*
echo '</b><br><br>';
echo $sql;
echo '</b><br><br>';
*/
$resultat= mysql_query($sql_entete.$sql)or die ('ERREUR '.mysql_error());
$resultat_compteur= mysql_query($sql_entete_compteur.$sql_compteur)or die ('ERREUR '.mysql_error());[/php]