Partage
  • Partager sur Facebook
  • Partager sur Twitter

afficher les résultats d'une recherche

Sujet résolu
    16 août 2017 à 16:01:16

    j'ai codé un moteur de recherche en php et mysql. il fonctionne bien et affiche les résultats. maintenant je veux que les résultats s'affichent de telle sorte que les résultats qui reviennent le plus souvent dans différentes recherches soient affichés le premier et ainsi de suite. J'aimerai votre aide si c'est possible

    -
    Edité par chriswilfried 16 août 2017 à 16:03:11

    • Partager sur Facebook
    • Partager sur Twitter
      17 août 2017 à 8:47:27

      Tu rajoute un count, tu fait un group by sur le champs qui t’intéresse, puis tu finis par un order by sur le count
      • Partager sur Facebook
      • Partager sur Twitter
        18 août 2017 à 13:22:03

        Merci florent m. J'essaye et je te faire un retour.

        -
        Edité par chriswilfried 18 août 2017 à 13:22:45

        • Partager sur Facebook
        • Partager sur Twitter
          20 août 2017 à 20:47:47

          Bonsoir Florent m. j'ai testé ton code il marche. Maintenant j'ai un autre souci. j'aimerai que mon moteur de recherche marche avec plusieurs moteurs de mots clés. j'ai par exemple, dans ma base de données,  "camerounaise des eaux". Lorsque j'entre "camerounaise des eaux" ou "camerounaise des" ou "des eaux" la recherche me retourne des résultats liés à la recherche, bref la recherche s'effectue. mais lorsque je tape plutôt "camerounaise eaux"., aucun résultat n'est retourné. j'ai alors créer une table mots_cles qui a trois champs : mot_cle1, motcle2, mot_cle3 dans  ma base de données pour pouvoir récupérer les mots clés afin d'effectuer la recherche.

          Mon premier souci : Traitement de la requête saisie

          stocker dans un tableau PHP les mots saisis après suppression des double espaces, des points, des virgules des tirets et autres caractères parasites dans la chaîne saisie.

          Mon deuxième souci: Modification de code existant

          j'aimerai un coup de main afin de modifier mon code pour adapter la recherche.

          <!DOCTYPE html>
          <html>
          	<head>
          		<title> Moteur de recherche</title>
          		<meta charset="UTF-8" />
          	</head>
          	<body>
          		<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
          			<label for="query">Entrer votre recherche : </label>
          			<input type="search" name="query" maxlength="80" size="80" id="query" /><br/>
          			Rechercher au niveau de : 
          			<select name="filtre">
          				<option value="Site entier">Site Entier</option>
          				<option value="Services">Services</option>
          				<option value="Produits">Produits</option>
          				<option value="Villes">Villes</option>
          			</select><br/>
          			<input type="submit" value="Rechercher" />
          		</form>
          <?php
          //Initialisation de la variable contenant les résultats
          $resultats="";
          $nbreParametres =1;//Nombre de paramètres à renseigner
          //traitement de la requête
          if (isset($_POST['query'])&& !empty($_POST['query'])) {
          	//Si l'utilisateur a entré quelque chose, on traite sa requête
          
          	//On rend clean la requête de l'utilisateur
          $query=preg_replace("#[^a-zA-Z ?0-9]#i", "", $_POST['query']);
          $query=trim($query);
          $array=explode(' ', $query);
          	for ($i=1; $i <=count($array) ; $i++) {
          	if ($_POST['filtre'] == "Site entier"){
          		$nbreParametres = 17;
          	 
          		$sql= "(SELECT NUM_ENTR, NUM_TYPES AS title FROM entreprises WHERE NUM_TYPES LIKE ? OR RAISON_SOCIAL LIKE ? OR E_MAIL LIKE ? OR SIGLE LIKE ? OR WEB LIKE ? OR LOGOS LIKE ? OR ADRESS LIKE ? OR DESCRIPTION_ENTREP LIKE ? OR NOM_DG LIKE ? OR TEL1_DG LIKE ? OR ADRESS_DG LIKE ? OR EMAIL1_DG LIKE ? OR EMAIL2_DG LIKE ?  OR SKYPE_DG LIKE ?)  UNION (SELECT E1.NUM_ENTR, E1.NUM_TYPES AS title FROM services_entreprises S, appartienent_services SE, entreprises E1 WHERE S.NUM_SERV=SE.NUM_SERV AND SE.NUM_ENTR= E1.NUM_ENTR 
          		AND S.LIBEL_SERV LIKE ?) UNION (SELECT E1.NUM_ENTR, E1.NUM_TYPES AS title
          		FROM produits_entreprises PE, produire P, entreprises E1 WHERE P.NUM_PROD=PE.NUM_PROD AND P.NUM_ENTR=E1.NUM_ENTR 
          		AND PE.LIBEL_PROD LIKE ?) UNION(SELECT E3.NUM_ENTR, E3.NUM_TYPES AS title
          		FROM villes V, situer VE, entreprises E3 WHERE V.NUM_VIL=VE.NUM_VIL AND VE.NUM_ENTR=E3.NUM_ENTR 
          		AND V.NOM_VILLES LIKE ?)";
          	}else if ($_POST['filtre']=="Services") {
          		$sql = "SELECT E1.NUM_ENTR, E1.NUM_TYPES AS title
          		FROM services_entreprises S, appartienent_services SE, entreprises E1 WHERE S.NUM_SERV=SE.NUM_SERV AND SE.NUM_ENTR=E1.NUM_ENTR 
          		AND S.LIBEL_SERV LIKE ?";
          	}else if($_POST['filtre']=="Produits"){
          		$sql= "SELECT E1.NUM_ENTR, E1.NUM_TYPES AS title
          		FROM produits_entreprises PE, produire P, entreprises E1 WHERE P.NUM_PROD=PE.NUM_PROD AND P.NUM_ENTR=E1.NUM_ENTR 
          		AND PE.LIBEL_PROD LIKE ?";
          	}else if ($_POST['filtre']=="Villes") {
          		$sql= "SELECT E3.NUM_ENTR, E3.NUM_TYPES AS title
          		FROM villes V, situer VE, entreprises E3 WHERE V.NUM_VIL=VE.NUM_VIL AND VE.NUM_ENTR=E3.NUM_ENTR 
          		AND V.NOM_VILLES LIKE ?";
          	} 
           }
          //Connexion à la base de données
          include("connect1.php");
          
          $req = $db->prepare($sql); 
          if($nbreParametres ==1){
          	$req->execute(array('%'.$query.'%' /*'%'.$query.'%'*/));
          }else{
          $req->execute(array('%'.$query.'%', '%'.$query.'%', '%'.$query.'%', '%'.$query.'%', '%'.$query.'%', '%'.$query.'%', '%'.$query.'%', '%'.$query.'%', '%'.$query.'%', '%'.$query.'%', '%'.$query.'%', '%'.$query.'%', '%'.$query.'%', '%'.$query.'%', '%'.$query.'%', '%'.$query.'%', '%'.$query.'%'));
          }
          $count = $req->rowCount();
          if($count >= 1){
          	echo "$count résultat(s) trouvé(s) pour <strong>$query</strong><hr/>";
          	while ($data = $req->fetch(PDO::FETCH_OBJ)) {
          		echo '#'.$data->NUM_ENTR.' - Titre: '.$data->title.'<br/>';
          	}
          }else { 
          	echo "Aucun Resultat trouvé pour <strong>$query</strong><hr/>";
          }
          }
          ?>
          		<?php echo $resultats; ?>
          	</body>
          </html>
          Besoin d'aide. Merci d'avance

          • Partager sur Facebook
          • Partager sur Twitter
            21 août 2017 à 9:21:19

            Il va te falloir split coté PHP et faire plusieurs LIKE.

            Tu peux récupérer un poids (en fonction du nombre de mots trouvé): 

            SELECT ("Thierry Henry" LIKE '%Thierry%') + ("Thierry Henry" like '%Henry%'), 
            ("Thierry Henry" LIKE '%Martine%') + ("Thierry Henry" like '%Henry%')

            Renvoie 2, 1

            (Les parenthèses sont importante)

            -
            Edité par florent m 21 août 2017 à 9:21:54

            • Partager sur Facebook
            • Partager sur Twitter
              23 septembre 2017 à 21:20:11

              Bonsoir ici. J'ai réussi à modifier mon code et il fonctionne bien.
              • Partager sur Facebook
              • Partager sur Twitter

              afficher les résultats d'une recherche

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown