Page 1 sur 1

Créer un moteur de recherche

Posté : 16 avr. 2009, 09:50
par Romuald632
Bonjour,
Je voudrais créer un moteur de recherche sur mon site qui est en PHP.
Il me semble qu'il faut utiliser la fonction
SELECT nom FROM la_table WHERE nom LIKE '%cequejecherche%'
Maintenant je pars de zéro
Quelqu'un peut-il m'aider ?
Merci d'avance

Posté : 16 avr. 2009, 10:06
par albat
Ce que tu montres n'est pas une fonction, mais une requête SQL. ;)

il faut que tu exécutes cette requête sur ta base (en l'occurrence, sur la table "la_table")
en indiquant à la place du libellé cequejecherche la valeur demandée par l'utilisateur.
$recherche = 'Duval'; // ici, je mets le nom en dur, pour l'exemple
$req_01 = "SELECT nom FROM la_table WHERE nom = '".$recherche ."'";       // recherche exacte
$req_02 = "SELECT nom FROM la_table WHERE nom LIKE '%".$recherche ."%'";  // recherche approchante
// exécution de la requête, etc...
Selon le type de recherche que tu souhaites faire (exacte ou approchante),
les résultats seront plus ou moins étendus.

Résultats avec la requête 1 : Duval
Résultats avec la requête 2 : Duval, Duvallet, Duvallois, Ledormeur-Duval, Jaipris-Duvalium,...

Posté : 16 avr. 2009, 10:38
par Berzemus
Pour faire vraiment bien, je te conseille d'étudier les possibilités de recherche full-text de MySQL, c'est bien plus efficace et sérieux:
http://dev.mysql.com/doc/refman/5.0/fr/ ... earch.html

Posté : 16 avr. 2009, 10:46
par albat
Pour faire vraiment bien, (...), c'est bien plus efficace et sérieux.
Berze, considère qu'on est fâchés. |(X

Posté : 16 avr. 2009, 10:51
par Romuald632
Bon j'ai un résultat qui s'affiche, mais que sur une partie de ma requête
Je cherche dans 2 champs de ma table :
<html>
<form method="post" action=""> 
Recherche par mot clef : 
  <input type="text" name="recherche">
<input type="submit" value="Rechercher"> 
</form>
</html> <?php

// Récupère la variable
mysql_connect("localhost", "root", "");
mysql_select_db('voyagez_vol');
$recherche = isset($_POST['recherche']) ? $_POST['recherche'] : '';
// la requete mysql

$sql = mysql_query("SELECT ville,commentaire FROM webcam WHERE commentaire LIKE '%".$recherche ."%'") or die (mysql_error());

// affichage du résultat
while(list($commentaire)=mysql_fetch_array($sql)){
echo 'Resultat de la recherche: '.$commentaire.'  <br />';
}
?> 

Posté : 16 avr. 2009, 10:53
par nasdrovia70
Re bonjour, j'aimerai créé une recherche multicritère sur une table et que chaque champs ne sois pas obligatoire, est ce qu' une âme charitable pourrai me montrer un petit script simple de préfèrence car je ne suis pas un expert, sur 2 ou 3 critère que je l'adapte a ma table merci d'avance.

Posté : 16 avr. 2009, 11:20
par Romuald632
A titre perso pour le moment je cherche pour fair une recherce sur une seule table. Après on verra sur toute les tables de ma bdd.

Posté : 16 avr. 2009, 12:36
par Berzemus
Pour faire vraiment bien, (...), c'est bien plus efficace et sérieux.
Berze, considère qu'on est fâchés. |(X
Mais.. je..
pour une fois que je prends le temps de répondre.. 40 minutes il m'a fallu..

Image

Posté : 16 avr. 2009, 13:55
par albat
Allez, je ne t'en veux pas.

Pour te le prouver, viens, je t'offre un verre... :twisted:

Image

Posté : 16 avr. 2009, 14:22
par Berzemus
M.err..ci.. csstunp.. peu ser... serré...

Image


Tout pardonné ?? Fête !!

Posté : 16 avr. 2009, 14:27
par furiouslol
mdr :p

Romuald pour vérifier ta requête affiche la a l'écran et exécute la sous myadmin, ca te permettra de vérifier déjà qu'elle est bien générée

Ensuite colle nous ta requête et explicite nous un peu ca
Bon j'ai un résultat qui s'affiche, mais que sur une partie de ma requête

Posté : 17 avr. 2009, 11:33
par Romuald632
Mon problème est en partie résolu.
Mes résultats s'affichent, parce qu'au lieu de mettre AND j'ai mis OR
<html>
<form method="post" action=""> 
Recherche par mot clef : 
  <input type="text" name="recherche">
<input type="submit" value="Rechercher"> 
</form>
</html>
<br />
<?php

// Récupère la variable
mysql_connect("localhost", "root", "");
mysql_select_db('voyagez_vol');
$recherche = isset($_POST['recherche']) ? $_POST['recherche'] : '';
// la requete mysql

$sql = mysql_query("SELECT * FROM webcam WHERE ville LIKE '%".$recherche ."%' OR commentaire LIKE '%".$recherche ."%'") or die (mysql_error());

echo "Résultat(s) de votre recherche :<br />";

// affichage du résultat
while($row=mysql_fetch_array($sql)){
echo "".$row['ville']." - ".$row['commentaire']."<br />";
}

?>
Je voudrais rajouter 2 paramètres dans mon résultat :
- Le nombre de réponse correspondant à la recherche
- Trier les résultats par pertinence

Merci d votre aide

Posté : 17 avr. 2009, 11:53
par orgerix
Le nombre de résultat peut être facilement obtenu avec mysql_num_rows().

Quand à la pertinence, c'est un vaste problème. Il faut d'abord réféchir sur quels critère un résultat est jugé pertinent, puis ensuite les implémenter.