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 :

problème conception barre de recherche [SQL-Server]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2011
    Messages : 99
    Par défaut problème conception barre de recherche
    bonjour à vous,
    j essai de mettre en place une barre de recherche mais j ai quelque difficulté pour la conception

    j ai reussi a la faire fonctionné mais seulement si y a un seul mot en faisant ceci
    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
     
    if (isset($_POST['action'])) 
           $_SESSION['critere'] = $_POST;
    if(isset($_SESSION['critere'])) 
            extract($_SESSION['critere']);// extraction des critères de recherche
    $choix = array();          
            if(isset($Keyword) && !empty($Keyword))
     
     {$choix[] = "Marque LIKE '%$Keyword%'";}                   
     {$choix[] = "Modele LIKE '%$Keyword%'";}
     {$choix[] = "Gamme LIKE '%$Keyword%'";}
     
    $critere = implode(' OR ', $choix);
     
    $requete = "select * ,(Marque) AS Marque from batterie WHERE $critere ORDER BY Marque ASC";
    $reponse = mysql_query( $requete ) ;
    ensuite en parcourant le net j ai trouvé une chose qui marche sur plusieur mots mais je n arrive pas a mettre en place car la ca fonctionne que sur un seul champ de ma table (exemple seulement la Marque) en faisant ceci

    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
     
    if (isset($_POST['action'])) 
           $_SESSION['critere'] = $_POST;
    if(isset($_SESSION['critere'])) 
            extract($_SESSION['critere']);// extraction des critères de recherche
    $choix = array();          
            if(isset($Keyword) && !empty($Keyword))
    {$choix[] = "Marque";} // j ai supprimé les autres champs car sinon ma requete donne une erreur sql
    $critere = implode(' ', $choix);
    $mots = explode( " ", $Keyword );
    if( count( $mots ) > 0 )
     
    $requete = "select * ,('Marque') AS Marque from batterie WHERE";
       for( $i = 0; $i < count( $mots ); $i++ ) {
          //$requete .= "$critere   ";
          $requete .= "  $critere LIKE '%". $mots[$i] ."%' ";
          if( $i < count( $mots ) - 1 )
             $requete .= " OR ";}
     
       $requete .= " ORDER BY Marque"; 
     
     
       $reponse = mysql_query( $requete ) ;
    je ne sais pas comment combiner les 2 vu que je souhaite une recherche sur la table qui se presente sous cette forme
    ID
    Marque
    Modele
    Gamme
    etc.. j ai 35 colonnes dont je souhaite rechercher

    j ai essayé avec un fulltext
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     select * from batterie WHERE MATCH(Marque,Modele,Gamme) AGAINST('exide') ORDER BY Marque
    mais j ai eu cette erreur #1191 - Can't find FULLTEXT index matching the column list
    cela a fonctionné a moitié quand j ai reussi a mettre mes champs Marque,Modele,Gamme en fulltext direct dans ma table car ensuite j ai fais cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $requete = "select * ,('Marque') AS Marque from batterie WHERE ";
       for( $i = 0; $i < count( $mots ); $i++ ) {
          //$requete .= "$critere   ";
          $requete .= "  MATCH($critere) AGAINST('$mots[$i]') ";
          if( $i < count( $mots ) - 1 )
             $requete .= " OR ";}
     
       $requete .= " ORDER BY Marque";
    du coup il recherche pas non plus le 2 eme mots

    j ai essayé une chose aussi comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $requete = "select * ,('Marque') AS Marque from batterie WHERE ID IN($critere)";
     
              for( $i = 0; $i < count( $mots ); $i++ ) {
                  //$requete .= "$critere";
                  $requete .= " LIKE '%". $mots[$i] ."%' ";
               if( $i < count( $mots ) - 1 )
                $requete .= " OR ";
                }
     
              $requete .= " ORDER BY Marque";
    mais erreur sql et en parcourant le net j ai cru comprendre que l on peut pas mettre un IN avec un LIKE

    voila , je ne sais pas comment procéder et pardonnez moi pour mes lacunes .
    je vous remercie d avance pour l aide apporté

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2014
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 219
    Par défaut
    Bonjour,

    Une piste

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT col1, col2
    FROM Marque
    WHERE col1 + col2 + col3 LIKE '%mot1%'
    OR col1 + col2 + col3 LIKE '%mot1%'
    ..

    Par contre tu risques d'avoir des problèmes avec les NULL, à gérer avec COALESCE, CASE, ISNULL..

    Il y a aussi le problème si une première partie du mot se trouve dans une colonne, et la seconde dans une suivante. Dans ce cas, tu peux ajouter un caractère séparateur dans ta concaténation (~ par exemple)
    Cela donnerait :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WHERE ISNULL(Col1, "") || '~' ||  ISULLL(Col2, "") .. LIKE '%lemot%'
    OR ISNULL(Col1, "") || '~' ||  ISULLL(Col2, "") .. LIKE '%lautremot%'

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2011
    Messages : 99
    Par défaut
    bonjour et merci pour cette piste avec le +
    j ai essayé ceci

    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
     
    $choix = array();
     
            if(isset($Keyword) && !empty($Keyword))
     
                      {$choix[] = "Marque";}
     
                      {$choix[] = "Modele";}  
     
    $critere = implode(' + ', $choix);
     
    $mots = explode( " ", $Keyword ); 
     
    if( count( $mots ) > 0 )
     
    $requete = "select * ,('Marque') AS Marque from batterie WHERE";
       for( $i = 0; $i < count( $mots ); $i++ ) {
          //$requete .= "$critere   ";
          $requete .= "  $critere LIKE '%". $mots[$i] ."%' ";
          if( $i < count( $mots ) - 1 )
             $requete .= " OR ";}
     
       $requete .= " ORDER BY Marque"; 
     
     
       $reponse = mysql_query( $requete ) ;
     
    echo $requete;
    l echo de ma requete est
    select * ,('Marque') AS Marque from batterie WHERE Marque + Modele LIKE '%exide%' OR Marque + Modele LIKE '%yuasa%' ORDER BY Marque

    mais dans ce cas me retourne rien et pas d erreur non plus

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2014
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 219
    Par défaut
    Bonjour,

    Affiche ta requête au format chaine directement, et copie colle dans ton sgbd afin d'avoir plus de détail.
    Cible le problème en supprimant les conditions.
    Affiche aussi MARQUE+MODELE en enlevant les conditions pour voir ce que ca donnes.
    Et enfin, fait attentions aux majuscules/minuscules.

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2011
    Messages : 99
    Par défaut
    Citation Envoyé par arthur57 Voir le message
    Bonjour,

    Affiche ta requête au format chaine directement, et copie colle dans ton sgbd afin d'avoir plus de détail.
    Cible le problème en supprimant les conditions.
    Affiche aussi MARQUE+MODELE en enlevant les conditions pour voir ce que ca donnes.
    Et enfin, fait attentions aux majuscules/minuscules.
    oui j ai justement fait la requete directement dans sql mais me retrourne
    MySQL a retourné un résultat vide (aucune ligne). (Traitement en 0.0010 sec)

    si il y a que Marque comme ceci
    select * ,('Marque') AS Marque from batterie WHERE Marque LIKE '%exide%' OR Marque LIKE '%yuasa%' ORDER BY Marque
    j ai un resulat mais j ai qu une colonne si je rajoute les autres avec les + j ai rien

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2014
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 219
    Par défaut
    Regarde du côté de la concaténation de colonnes en SQL CONCAT, cela dépends de ton SGBD.

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

Discussions similaires

  1. Barre de recherche des applications : problème d'icone
    Par pol2095 dans le forum Windows 10
    Réponses: 0
    Dernier message: 13/01/2017, 10h57
  2. [MySQL] Problème avec ma Barre de Recherche PHP
    Par moinamkomori dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 07/06/2016, 09h38
  3. problème de langue barre de recherche google
    Par tiliut dans le forum Firefox
    Réponses: 2
    Dernier message: 21/02/2009, 11h09
  4. problème avec moteur de recherche
    Par allyson dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 16/02/2005, 16h23
  5. Réponses: 12
    Dernier message: 27/05/2004, 00h13

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