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 :

Recherche multicritère avec plusieurs mots


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Recherche multicritère avec plusieurs mots
    Bonjour,

    Dsl si le sujet a déjà été traité et je pense que c'est surement le cas mais je n'ai rien trouvé qui pourrait m'aider.

    J'aimerais faire une requête qui aurait pour fonction de rechercher dans plusieurs champs, plusieurs mots;

    Je m'explique j'ai un formulaire qui envoie donc un champ intitulé recherche, la valeur de recherche peu comprendre plusieurs mots;

    Je tape dans mon champs
    Exemple : hache 115

    J'aimerais que la requête puisse chercher dans un champ les deux mots qui aurait été séparés au préalable donc : Hache et en suite 115 et qu'ensuite qu'elle est trouvée ou pas qu'elle cherche dans un autre champ les mêmes mots, afin de pouvoir extraire de ma base tous les enregistrements qui auraient un rapport avec ces deux mots.

    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
    $select3 = "select * from articles WHERE (AC2 LIKE '%$recherch%' OR AC5 LIKE '%$recherch%' OR AC6 LIKE '%$recherch%' or catgenr LIKE '%$recherch%') AND AC1 !='nondispo'";
    $result3 = mysql_query($select3) or die ('<br><span class=MERREUR>Pas de résultat dans la recherche titre et numéro</span><br>'.mysql_error() );
    while($row3 = mysql_fetch_array($result3)) {
     
    $AC0= $row3['AC0'];
    $AC1= $row3['AC1'];
    $AC2= $row3['AC2'];
    $AC3= $row3['AC3'];
    $AC5= $row3['AC5']; 
    $AC7= $row3['AC7']; 
    $QTE= $row3['QTE'];
    $PRIXV= $row3['PRIXV'];
    $PRIXA= $row3['PRIXA'];
    }
    ?>
    Comme vous pouvez le voir il y a 4 champs possibles à visiter et une condition d'exclusion d'enregistrement.


    Mais je n'arrive vraiment pas à comprendre le principe de fonctionnement d'explode de for et de foreach donc si vous avez un exemple voir plusieurs très très simples à me donner ou à m'indiquer ça serait vraiment très sympa, d'autant que je ne sais pas lequel me conviendrait le mieux pour ce que je veux faire.

    Je me demande si le plus simple ne serait pas de faire une requête pour chaque mot trouvé dans les 4 champs et répéter la requête autant de fois qu'il y aurait de mot à trouver, mais là je bug et je ne sais pas comment présenter tout ça ni même mettre une requête dans un array ou autre


    D'avance merci beaucoup pour votre aide si précieuse.

    Thomas

    P.S.
    Surtout si vous avez besoin de la moindre info complémentaire n"hésitez pas^^

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    d'explode de for et de foreach donc si vous avez un exemple voir plusieurs très très simple à me donner ou à m'indiquer ça serait vraiment très sympa, d'autant que je ne sais pas lequel me conviendrait le mieux
    explode() decoupe une chaine de caractere
    foreach() parcourt un tableau php
    for() fait une boucle php

    tu as des exemples dans la doc php
    http://fr.php.net/explode
    http://fr.php.net/manual/fr/control-...es.foreach.php
    http://fr.php.net/manual/fr/control-structures.for.php

    Par ailleurs mysql_query ne retourne pas FALSE s'il n'y a pas de resultats.
    Si tu veux afficher un message quand il n'y rien de trouvé, il faut compter le nombre d'enregistrements retournés.

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Merci sabotage
    J'ai pus effectivement trouver une solution avec explode et foreach^^ me reste a réglé quelque soucis mais effectivement avec ces quelques lignes de commande je peux à présent décomposer la phrase tapé dans le champs du formulaire recherche.

    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
    $decomp = $recherch; 
    $pieces = explode(" ", $decomp); 
     
    foreach($pieces as $cle=>$valeur)
    { 
      //echo $cle, ' => ', $valeur, '<br />'; Je me passe de cette ligne
     
    $select3 = "select * from articles WHERE (AC2 LIKE '%$valeur%' OR AC5 LIKE '%$valeur%' OR AC6 LIKE '%$valeur' or catgenr LIKE '%$valeur%') AND AC1 !='nondispo'";
    $result3 = mysql_query($select3) or die ('<br><span class=MERREUR>Pas de résultat dans la recherche titre et numéro</span><br>'.mysql_error() );
        while($row3 = mysql_fetch_array($result3)) {
     
    $AC0= $row3['AC0'];
    $AC1= $row3['AC1'];
    $AC2= $row3['AC2'];
    }
    }
    la valeur prise pour rechercher les mots dans ma requête est "$valeur"

    Je met une petite explication ça peu toujours servir à d'autre ^^

    Par contre j'ai un autre soucis à présent^^

    $recherch est envoyer dans un premier formulaire qui va compter combien d'enregistrement il y a avec les valeurs trouver dans $recherch une fois compter j'ai une ligne qui renvois sur un autre formulaire qui lui va afficher les enregistrements trouvés

    Je prend un exemple :
    Je tape dans mon champs $recherch : hache guerrier seigneur

    le premier formulaire reçois bien les trois mots les décompose et compte dans la base le nombre d'enregistrement contenant l'un des trois mots, une fois fait à la fin du formulaire j'ai une ligne de commande qui envois vers un autre formulaire par un "refresh" le problème c'est que cette ligne de commande n'envoie que le premier mot donc dans l'exemple qui précède "hache" donc j'ai mis la ligne suivante mais j'ai essayer les trois méthodes qui suivent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if($modok == 'cool')
    {
    $_POST["recherch"];
     
    echo "<meta http-equiv=refresh content=0;URL=index.php?mod=verifstock2&total=$total&totalK=$totalK&CL01=$CL01&REFCL=$REFCL&recherch=$recherch>";
     
    echo '<meta http-equiv=refresh content=0;URL=index.php?mod=verifstock2&total='.$total.'&totalK='.$totalK.'&CL01='.$CL01.'&REFCL='.$REFCL.'&recherch='.$recherch.'">';
    }
    ?>
    la ligne suivante est pour l'instant permanente mais elle ne devrait pas exister si l'une des deux ci-dessus fonctionnaient, la suivante marche très très bien et quand je passe ma souris dessus elle affiche bien les trois mots à envoyer dans le prochain formulaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="index.php?mod=verifstock2&total=<? echo"$total"; ?>&totalK=<? echo"$totalK"; ?>&CL01=<? echo"$CL01";?>&REFCL=<? echo"$REFCL";?>&recherch=<? echo"$recherch"?>">suite</a>
    Donc pour résumer y a-t-il un autre moyen d'envoyer mes données dans l'autre formulaire sans passer par un "refresh" ce qui me permettrais d'avoir enfin tous mes mots passer dans le second formulaire sans que je sois obliger de cliquer sur un lien^^

    D'avance merci et merci encore pour l'info

  4. #4
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Sans vouloir revenir sur ta solution si elle marche, je te propose de regarder le chapitre de MySQL concernant la recherche full-text. Tu auras à mon avis la réponse à ton besoin initial

    Autant déléguer les fonctionnalité de recherche à MySQL qui sera (toujours à mon humble avis) plus performant que le tuple explode, foreach et LIKE '%valeur%'

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Comme demander :p
    Merci pour l'info et l'adresse du site que tu m'as donner^^ j'ai fais les modifications dans ma requete, mais bon ça ne marche pas^^ doit je faire une table particulière avec des champs spéciaux ou ma requete n'est pas bonne ? (j'ai volontairement désactiver l'exclusion de AC1 pour ne pas trop me compliquer les choses :p)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $select = "SELECT count(id_art) FROM articles WHERE MATCH (AC2,AC5,AC6,catgenr) AGAINST ('$recherch')"; //AND AC1 !='nondispo'";
    $result= mysql_query($select) or die ('Erreur : '.mysql_error() );
    $row = mysql_fetch_row($result);
    $total = $row[0];
    avec ça j'ai comme message d'erreur :
    Erreur : Can't find FULLTEXT index matching the column list

    j'ai modifier mes champs appeler dans ma table et je les ai mis en FULLTEXT, mais bon rien n'y fait

    D'avance merci ^^

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Personnellement, quand j'ai un problème avec une requête SQL, je fais un echo de celle-ci afin de pouvoir la jouer indépendamment de php. Soit dans phpMyAdmin soit, si c'est possible, directement en ligne de commande. ça permet de s'affranchir de pas mal de problème pernicieux.

Discussions similaires

  1. [MySQL] recherche avec plusieurs mots dans mon moteur
    Par hadjiphp dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/05/2009, 08h53
  2. moteur de recherche avec plusieurs mots clés
    Par kadiato dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 17/02/2009, 15h44
  3. [MySQL] recherche avec plusieurs mots clé
    Par RAtiche dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/05/2008, 17h03
  4. recherche avec plusieurs mots-clé
    Par MAMANHOU dans le forum IHM
    Réponses: 6
    Dernier message: 12/07/2007, 10h05
  5. Réponses: 6
    Dernier message: 04/11/2005, 17h09

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