IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Recherche par mot clés - Php -Mysql


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Points : 55
    Points
    55
    Par défaut Recherche par mot clés - Php -Mysql
    Bonjour,

    J'ai crée un site de locations de vacances.
    A ce jour , j'ai plus de 1 000 inscrits.

    J'aimerai mettre en place un syteme de recherche par mot clés sur
    deux champs de ma table: "nomGite" et "descriptifGite"

    Graca a cette recherche, la requete me retournerai tous les enregistrements avec les mots clés recherchés.

    J'espere avoir été clair.

    Merci de votre aide.

    Pod

  2. #2
    Membre habitué Avatar de crashyear
    Homme Profil pro
    Responsable d’exploitation informatique
    Inscrit en
    Janvier 2006
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Responsable d’exploitation informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 267
    Points : 176
    Points
    176
    Par défaut
    Salut,

    Tu connais le SQL???
    Tu as juste à mettre dans ta requête un LIKE et des % exemple :
    $query="SELECT * FROM MATABLE WHERE nomGite LIKE %".$text."% AND descriptifGite LIKE %".$text."% ";
    ou $text est le mot saisi par l'utilisateur dans un champ.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    Bonjour,

    Je me joint à vous car j'ai un problème similaire mais un peu plus complexe je pense.

    Je veux faire la même chose sur un champ, seulement l'utilisateur saisit une expression de cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    voiture+moteur banane "salut toi"+bonjour
    Et en fait le + correspond à un ET, l'espace " " correspond à un OU, et le "bla bla" cherche le motif entier dans le champ.
    En gros c'est un peu comme dans les moteurs de recherche.

    Alors j'ai commencé à traiter l'expression avec des explode(), mais le problème c'est que lors du premier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    explode(' ',$expression);
    je me retrouve avec la chaine "salut toi" coupée alors qu'il faudrait qu'elle soit conservée...

    Si quelqu'un a une idée ca serait sympa !

  4. #4
    Membre habitué Avatar de crashyear
    Homme Profil pro
    Responsable d’exploitation informatique
    Inscrit en
    Janvier 2006
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Responsable d’exploitation informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 267
    Points : 176
    Points
    176
    Par défaut
    Tu ne peut pas essayé de mettre ton explode avec les guillemets et ensuite de travailler sur les espaces?
    Exemple :
    $tab=explode('"',$expression);
    la tu aura un truc du style :
    $tab[0]=moteur+...
    $tab[1]=salut toi;
    $tab[2]=bonjour
    et ensuite tu refait un explode sur chaque objet du tableau avec cette fois ci les espaces

    PS : si tu ve savoir combien ton explode te renvoi d'objet dans ton tableau tu fais un count($tab) et tu aura ce nombre.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    non je ne peux pas ca fausse mes conditions car par la suite je dois placer des AND à la place des + mais dans des blocs OR qui sont délimités par les espaces.

    En fait il faudrait un moyen (peut-être les regex?) pour d'abord remplacer les espaces contenus dans un "....." par des _ par exemples, et après j'explode sur les espaces.

    donc d'abord j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    voiture+moteur banane "salut toi"+bonjour
    puis grace au regex ou autre j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    voiture+moteur banane "salut_toi"+bonjour
    et ensuite c'est bon je peux exploder sur les espaces...

    bon si un pro des regex passe par là =)

  6. #6
    Membre habitué Avatar de crashyear
    Homme Profil pro
    Responsable d’exploitation informatique
    Inscrit en
    Janvier 2006
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Responsable d’exploitation informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 267
    Points : 176
    Points
    176
    Par défaut
    Salut,

    Tu n'as pas forcement besoin des regex,
    Tu peut faire un explode sur les " et tous les espace qui se trouve dedans tu les transformes en _ et ensuite tu recré ta chaine et tu refait un explode sur les espaces cette fois ci

    A+

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    c'est ce que j'ai fait voici une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    $str = 'montee+marche voiture+" roule en"+voiture. "salut toi " ';
    echo "<br>".$str;
    if ((substr_count($str, '"')%2)!=0){
    	$str="";
    	echo "<br> nombre impair de guillemets";
    }
    $pos=0;
    $cpt=0;
    $sortie="";
    while ($pos<strlen($str)){		
    	$lettre=substr($str,$pos,1);
    	if ($lettre=='"')
    		$cpt++;
    	// si on a un espace et que le nb de guillemets courant est impair on remplace
    	if (($lettre==' ') && (($cpt%2)!=0))
    		$lettre="_";
    	$sortie.=$lettre;
    	$pos++;
    }
    echo "<br>".$sortie;

  8. #8
    Membre confirmé Avatar de yjuliet
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 362
    Points : 460
    Points
    460
    Par défaut
    quoi qu'il en soit, ce dont tu as besoin, c'est d'un analyseur syntaxique qui te permette de traduire ta requete en SQL, les regex seront insuffisantes

    En gros, il faut que tu construises à partir de la "requete" entrée l'arbre de conditions :
    A+B C+"D E"
    doit te donner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
           OR
          /  \
         /    \
        /      \
      AND      AND
      / \      / \
     /   \    /   \
    A     B  C   "D E"
    à partir de cet arbre, il t'est facile de construire la requete SQL correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ... WHERE (... LIKE '%A%' AND ... LIKE '%B%) OR (... LIKE '%C%' AND ... LIKE '%D E%)

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    c'est tout à fait ce que j'ai fait, en rajoutant des AND 1 de tps en tps, en supprimant les mots de moins de 3 lettres etc.

    si ca interesse quelqu'un je peux donner mon code.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Créer un moteur de recherche par mots clés rapide PHP
    Par MaitreTsiang dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 30/11/2009, 09h28
  2. [MySQL] Recherche par mot clés - Php
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 20/09/2006, 12h21
  3. [MySQL] recherche par mots clés
    Par spartan dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/02/2006, 16h11
  4. [Tableaux] Moteur de recherche par mot clés
    Par Nee dans le forum Langage
    Réponses: 4
    Dernier message: 20/01/2006, 11h30
  5. Recherche par mots clés
    Par legillou dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 17/06/2005, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo