Bonjour,
Je cherche à faire une recherche par mot-clés dans ma base de données MySQL mais avec une certaine condition. Je développe un site de questions/réponses avec donc deux tables : question et reponse. La table reponse contient un champ id_question, correspondant à la question auquelle elle repond.
J ai réussi à faire une recherche par motclés en utilisant le MATCH...AGAINST mais là je désirerai afficher les questions contenant ces mots clés, mais en les classant par le nombres de réponses.
Voila ma methode de recherche :
//Recherche de question proches
//Le classement se fait par ordre de pertinence
//DOC : http://dev.mysql.com/doc/refman/5.0/fr/fulltext-search.html
function _rechercheQuest($chaine){
$chaine = explode(",",$chaine);
$this->m_nAccesBD->connexion(); //Connexion BD
$sRequete = 'SELECT *, MATCH(`intitule_question`) AGAINST('.$chaine[0].') AS score FROM question';
$sRequete .= ' WHERE id_question NOT IN ('.$this->id_question.') AND ';
$sRequete .= 'MATCH (`intitule_question`) AGAINST ('.$chaine[0].')';
for($i = 1; $i<count($chaine); $i++){
$sRequete .= ' OR MATCH (`intitule_question`) AGAINST ('.$chaine[$i].')';
}
//echo '<p>Requete SQL : '.$sRequete.'</p>';
$rResultat = $this->m_nAccesBD->requete($sRequete);
$this->m_nAccesBD->deconnexion(); //Deconnexion
$aQuestProche = array();
while($aListe = mysql_fetch_array($rResultat)){
$aQuestProche[$aListe['id_question']] = $aListe;
}
return $aQuestProche;
}
Et voila celle que je tente de faire en indiquant le nombre de reponses puis en classant par odre descendant:
//Recherche questions proches populaires
//Methode à retravailler : probleme sur requete SQL
function _rechercheQuestPop($chaine){
$chaine = explode(",",$chaine);
$this->m_nAccesBD->connexion(); //Connexion BD
$sRequete = 'SELECT q.*,count(r.id_reponse) as nb_rep FROM question q ';
$sRequete .= 'LEFT JOIN reponse r ';
$sRequete .= 'ON r.id_question = q.id_question ';
$sRequete .= 'WHERE q.id_question != '.$this->id_question.' AND ' ;
$sRequete .= 'MATCH (`intitule_question`) AGAINST ('.$chaine[0].')';
for($i = 1;$i<count($chaine);$i++){
$sRequete .= ' OR MATCH (`intitule_question`) AGAINST ('.$chaine[$i].')';
}
$sRequete .= ' ORDER BY nb_rep DESC limit 0,30';
$rResultat = $this->m_nAccesBD->requete($sRequete);
Merci d avance ;)