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 :

Création d'une recherche


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Points : 54
    Points
    54
    Par défaut Création d'une recherche
    Bonjour je suis entrain de créer une recherche pour mon site internet mais je ne sait pas comment ordonner mes résultats.
    Voici tout d'abord mon code :

    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
     
    $mottrouve=explode(" ",$mot);
     
    		$compte=sizeof($mottrouve);
     
    			if($compte==1){
     
    			  $requete ="WHERE (p.codeMachine LIKE '%$mot%' or nomMachine LIKE '%$mot%' or designationMachine LIKE '%$mot%')";
    			}
    			else if($compte==2){
    			$mot1=$mottrouve[0];
    			$mot2=$mottrouve[1];
    			 $requete ="WHERE ((p.codeMachine LIKE '%$mot%' or nomMachine LIKE '%$mot%' or designationMachine LIKE '%$mot%') or ";
    			  $requete .="(p.codeMachine LIKE '%$mot1%' or nomMachine LIKE '%$mot1%' or designationMachine LIKE '%$mot1%') or ";
    			  $requete .="(p.codeMachine LIKE '%$mot2%' or nomMachine LIKE '%$mot2%' or designationMachine LIKE '%$mot2%'))";
    			}
    			else{
     
    			}
    $mot => recherche client.
    et je ne vais bien entendu pas laisser mes if -> else if -> else, mais plutôt partir avec un for...
    enfin bref...

    mon problème est de classer mes produits selon qu'il est très proche de la recherche ou non.

    Par exemple ça devra être classé comme ceci :
    - Proche de $mot
    - Proche de $mot1 et $mot2
    - Proche de $mot1 ou $mot2

    J'espère que je suis assez clair dans mon problème...
    Merci d'avance de votre aide

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    T'as pas essayé les recherches fulltext ? C'est pourtant ce qui se fait de mieux pour MySQL.

    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
    mysql> CREATE TABLE articles (
        ->   id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
        ->   title VARCHAR(200),
        ->   body TEXT,
        ->   FULLTEXT (title,body)
        -> ) ENGINE=MyISAM;
    Query OK, 0 rows affected (0.00 sec)
     
    mysql> INSERT INTO articles (title,body) VALUES
        -> ('MySQL Tutorial','DBMS stands for DataBase ...'),
        -> ('How To Use MySQL Well','After you went through a ...'),
        -> ('Optimizing MySQL','In this tutorial we will show ...'),
        -> ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
        -> ('MySQL vs. YourSQL','In the following database comparison ...'),
        -> ('MySQL Security','When configured properly, MySQL ...');
    Query OK, 6 rows affected (0.00 sec)
    Records: 6  Duplicates: 0  Warnings: 0
     
    mysql> SELECT * FROM articles
        -> WHERE MATCH (title,body) AGAINST ('database');
    +----+-------------------+------------------------------------------+
    | id | title             | body                                     |
    +----+-------------------+------------------------------------------+
    |  5 | MySQL vs. YourSQL | In the following database comparison ... |
    |  1 | MySQL Tutorial    | DBMS stands for DataBase ...             |
    +----+-------------------+------------------------------------------+
    2 rows in set (0.00 sec)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Points : 54
    Points
    54
    Par défaut
    Merci bcp parfait....



    J'ai crié VICTOIRE trop vite....

    alors voici ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requetes="SELECT *, MATCH (codeMachine,nomMachine,designationMachine) AGAINST ('".$mot."') AS score FROM machine p, gerer g WHERE MATCH (codeMachine,nomMachine,designationMachine) AGAINST ('".$mot."') AND p.codeMachine=g.idproduit AND g.idFam>=1 GROUP BY p.codeMachine ORDER BY score DESC  ";
    avec $mot ce que le client recherche.

    J'aimerais que si le client tape 2 mots :
    - S'il existe des résultats avec les 2 mots ça n'affiche que ces résultats
    - S'il n'existe pas de résultat avec les 2 mots affiche résultat mot1 puis résultat mot2.

    Même principe si 3-4-5... mots

    Est ce que c'est possible?
    Merci de votre aide

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Tu récupères le score, s'il est trop faible, tu lance une (ou plusieurs) nouvelles requêtes de recherche plus spécialisées.

  5. #5
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    salut; benjamen , il n'a pas donnée beaucoup d'information sur le moteur mysql utilisé.
    je crois qu'il veut implémenter un moteur de recherche , mais s'il veut atteindre un niveau de pertinence là faut creusé plus ++++.
    y'a des moteurs payants comme google mini ( 2000 euro )

  6. #6
    Candidat au Club
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Octobre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2012
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    As tu essayer avec un Formulaire simple?

    hmmm, exemple:

    Mettre dans la page formulaire.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form action="rechercher.php" method="post">
    Rechercher:<input type="text" value="" id="re"></input>
    </form>
    Page rechercher.php
    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
    <?php
     
    // Connexion MYSQL ici.
     
    $saisie = $_POST["re"];
     
    //Utilisation de wildcards %recherche%
     
    $sql = mysql_query("SELECT * FROM laTable WHERE (champ1 = '%$saisie% OR champ2 = '%saisie%' OR champ3 = '%saisie%' OR champ4 = '%saisie%') ORDER BY champ1 ASC");
     
    $resultats = mysql_num_rows($sql);
     
    if ($resultats == 0)
    {
    echo "Aucun resultats";
    } 
    else
    {
     
    // On affiche les resultats
     
    echo "$resultats resultats pour le mot $saisie";
     
      while ($results = mysql_fetch_objects($sql))
      {
    echo "$results->champ1 | $results->champ2 | $results->champ3 |  $results->champ4";
      }
     
    }
     
    ?>

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Points : 54
    Points
    54
    Par défaut
    je pense que je me suis mal expliqué.
    Mes résultats sont pertinent et nombreux ( de trop justement)

    C'est pour cela que j'aimerais classé ces résultats, pour diminuer un peu plus les résultat.
    S'il existe des résultats très pertinents on n'affiche que ceux-ci (contient 2 mots/2), sinon affiche tous les résultats.

    Merci de votre aide, en espérant avoir été plus clair

  8. #8
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Pourquoi ne pas ordonner avec le score et ne sortir que les n premier éléments ?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Points : 54
    Points
    54
    Par défaut
    Ben le problème c'est que le score est très variable d'une recherche à l'autre :

    si je tape dans ma recherche massicot électrique
    - Les résultats qui contiennent les mots "massicot" et "électrique" ont un score de 6.014
    - Les résultats contenant le mot "massicot" ou "électrique" ont un score variant de 5.60 à 2.40

    si je tape dans ma recherche destructeur de papier
    - Les résultats qui contiennent les mots "destructeur" et "papier" ont un score variant de 4.08 à 2,33
    - Les résultats contenant le mot "destructeur" ou "papier" ont un score variant de 2.10 à 0.68

    comment je pourrais lui dire que pour massicot je veut les scores>6 et pour destructeur de papier les scores>2.10

    Merci de ton aide

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Points : 54
    Points
    54
    Par défaut
    up

Discussions similaires

  1. [AC-2007] Création d'une recherche particuliere
    Par Sponge bob dans le forum Modélisation
    Réponses: 5
    Dernier message: 30/03/2010, 22h39
  2. [AC-2003] Création d'une recherche multicritère
    Par supermax_ck dans le forum Modélisation
    Réponses: 4
    Dernier message: 19/07/2009, 09h05
  3. [MOSS 2007] Création d'une fonction de recherche
    Par Enthau dans le forum SharePoint
    Réponses: 0
    Dernier message: 14/04/2008, 16h21
  4. [VBA]Création d'une procédure de recherche
    Par Thegad dans le forum VBA Access
    Réponses: 3
    Dernier message: 03/04/2007, 18h16
  5. Création d'un etat apres une recherche
    Par jojo57 dans le forum Access
    Réponses: 10
    Dernier message: 15/05/2006, 10h27

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