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

PHP & Base de données Discussion :

[MySQL] requête sql recherche de mots clés


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Points : 12
    Points
    12
    Par défaut [MySQL] requête sql recherche de mots clés
    Bonjour

    Voilà ce que je dois faire : j'ai un utilisateur qui doit rentrer un mot clé dans une zone de recherche. J'ai une table produit avec le Nom1P du produit et le Nom2P du produit c'est à dire que le nom du produit est divisé en 2 : par exemple pour le mot clé "disque dur" le Nom1p = "disque" et Nom2P = "dur".
    Dans ma table j'ai aussi le nom qui correspond à la marque du produit.

    Le problème est apr exemple que lorsque l'utilisateur entre 1 mot clé correspondant au produit et 1 mot clé correspondant au nom la requête me ressort dans mon tableau 2 fois le bon résultat et une fois le mauvais résultat.

    Voici ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM produit
    where Nom1P LIKE '$motcle1'
    AND nom LIKE '$motcle2'";
    Merci de m'aider à ce que dans mon tableau si par exemple je cherche un "ecran sony" il me ressorte que l'écran sony et pas tous les écrans se trouvant dans ma table produit.



    Code PHP supprimé par Magnus. Merci d'y penser à l'avenir

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 42
    Points : 43
    Points
    43
    Par défaut
    j'ai le meme probleme que toi avec le passage de variable dans une clause where je me demande si on peut mettre un champ ou un controle dans une requete essaye de mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT *
    FROM produit
    WHERE Nom1P LIKE '" & $motcle1 & "'
    AND nom LIKE '" & $motcle2 & '";

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    J'ai une question...

    Peut on mettre 3 AND de suite dans une requête ? j'ai essayé et ça n'a pas l'air de fonctionner.

    Voici ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM produit where Nom1P LIKE 'motcle1' and Nom2P LIKE 'motcle2' and nom LIKE 'motcle3';
    merci

    PS : j'ai essayé de mettre des & comme tu me l'as suggéré mais ça ne change rien.

  4. #4
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 637
    Points : 6 805
    Points
    6 805
    Par défaut
    Citation Envoyé par lanysteph
    J'ai une question...

    Peut on mettre 3 AND de suite dans une requête ? j'ai essayé et ça n'a pas l'air de fonctionner.
    Bien sur tu peux mettre plusieurs AND, mais tu peux aussi mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ..
    WHERE nom1P LIKE IN (talistedevaleur)
    ..
    ou ta liste de valeur correspond à tous les mots clefs de tes AND.
    @+
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 253
    Points : 74
    Points
    74
    Par défaut
    Hello !

    Ce post date, mais il em semble qu'il ressemble typiquement à un probleme dont j'ai eu à faire il y a quelques mois quand je débutais sur ce site

    Tu déclares ta variable (recupération du contenu tappé dans le champs de recherche)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = htmlentities( $_POST['rechercher'] );
    tu éxécutes l'action uniquement sur il y a eu l'action de RECHERCHE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ( isset ( $_POST['rechercher']  ) )
    {
    Si le résultat de la recherche n'est pas vide et s'il est supérieur à 1 (dans mon sens chercher une lettre est inutile, voire 2 selon ton domaine de recherche)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      if($result != "" && strlen ( $result ) > 1 )
      {
     //connexion sur ta base à faire
    tu sélectionnes tous les champs de ta tables, et tu recherches dans chacun des champs que tu désires contenant au moins le mot tappé par l'utilisateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * from TA_TABLE where  ";
    // le % avant/apres la variable siginifie que tu prendras toutes les lignes contenant au moins ces lettres "$result"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        $sql .= "Nom1p like '%".$result."%' OR Nom2P like '%".$result."%' ";
        $res=odbc_exec($connect, $sql);
        while(odbc_fetch_row ( $res ) )
        {
    // tu récupères tes variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          $TonChamps1=odbc_result($res,"TON_CHAMPS1");
          $TonChamps2=odbc_result($res,"TON_CHAMPS2");
    // et là tu fais ton traitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    // traitement traitement traitemant ******************** //
    // et un petit compteur pour compte le nombre de produits que tu as trouvé avec les mots clés tappés au préalable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          $Counter_products += 1;
        }
    // et la ton traitement s'il n'y a aucun résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        if($Counter_products==0)
        {
          echo "Il n'y a aucun résultat pour votre recherche ".$result." ;
        }
      }
    // et la ton traitement si le champs de recherche est vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      elseif(strlen ( $result ) == 0))
      {
        echo "Il n'y a aucun résultat pour votre recherche ".$result." ;
      }
    // et la ton traitement si le champs de recherche ne contient qu'un seul caractère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      elseif(strlen ( $result ) == 1))
      {
        echo "Il n'y a aucun résultat pour votre recherche ".$result." ;
      }
    // En cas d'erreur (il faut toujous les traiter)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      else
      {
        // traitement de ton erreur
      }
     
    }

    Donc ça donne :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    $result = htmlentities( $_POST['rechercher'] );
    if ( isset ( $_POST['rechercher']  ) )
    {
      if($result != "" && strlen ( $result ) > 1 )
      {
        //connexion sur ta base à faire
        $sql = "SELECT * from TA_TABLE where Nom1p like '%".$result."%' OR Nom2P like '%".$result."%'  ";
        $res=odbc_exec($connect, $sql);
        while(odbc_fetch_row ( $res ) )
        {
          $TonChamps1=odbc_result($res,"TON_CHAMPS1");
          $TonChamps2=odbc_result($res,"TON_CHAMPS2");
          $Counter_products += 1;
        }
        if($Counter_products==0)
        {
          echo "Il n'y a aucun résultat pour votre recherche ".$result." ;
        }
      }
      elseif(strlen ( $result ) == 0))
      {
        echo "Il n'y a aucun résultat pour votre recherche ".$result." ;
      }
      elseif(strlen ( $result ) == 1))
      {
        echo "Il n'y a aucun résultat pour votre recherche ".$result." ;
      }
      else
      {
        // traitement de ton erreur
      }
     
    }
    Voilà... Evidemment c'est à appronfondir ... je te mets jsute sur la voie

    En éspérant que ça aideras quelqu'un comme les posts de ce site m'ont déjà beaucoup aidés et qu'ils m'aident encore

  6. #6
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Citation Envoyé par Fleur-Anne.Blain Voir le message
    Bien sur tu peux mettre plusieurs AND, mais tu peux aussi mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ..
    WHERE nom1P LIKE IN (talistedevaleur)
    ..
    ou ta liste de valeur correspond à tous les mots clefs de tes AND.
    @+
    Je sais que c'est vieux et qu'à l'époque vous étiez encore une très jeune padawane... mais Mme Blain, LIKE, ça correspondrait plutôt à OR qu'à AND ?

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

Discussions similaires

  1. Recherche des mots clés dans ma base MySQL
    Par maxdata dans le forum Langage
    Réponses: 4
    Dernier message: 17/12/2013, 00h28
  2. requête pour recherche de mots clés
    Par uglypanda dans le forum Requêtes
    Réponses: 1
    Dernier message: 07/02/2013, 09h31
  3. Recherche par mot clés - Php -Mysql
    Par pod1978 dans le forum Requêtes
    Réponses: 8
    Dernier message: 22/09/2006, 13h01
  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