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 :

[SQL] Aide pour un moteur de recherche


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut [SQL] Aide pour un moteur de recherche
    Salut a tous, je souhaiterais mettre un moteur de recherche dans mon site un peu plus avancé que celui que j'avais avant.

    Je m'explique:

    j'aimrais qu'il cherche des critiques par auteurs. Pour se faire il regarde dans la BDD tout les titre qui ressemble au mot clé (avec LIKE %mot clé%) en SQL.

    Le probleme est que par exemple si dans la BDD il est entré Nom Prenom et que le mot clé est de type Prenom Nom il ne va rien trouver.

    Avez vous une idée?
    manganimes (en construction) -
    zemanga

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Salut,

    Tu peux concatener tous les champs utiles à la recherche, puis faire autant de "like" qu'il n'y a de "mots" dans ton champs de recherche, en séparant les mots par des espaces.

    Ta requete ressemblerait à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE nom||prenom like '%$mot1%'
    AND nom||prenom like '%$mot2%'
    Tu peux ajouter une syntaxe de type AND et OR, mais ça complique les choses
    K

  3. #3
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    merci mais le probleme est que certaine fois il n'y aura qu'un mot dans ce cas ca risque de poser probleme.

    :./
    manganimes (en construction) -
    zemanga

  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
    Ton critère de recherche doit être découpé en mots, chez nous un mot est séparé d'un autre par un espace (c'est pas le cas dans toutes les langues)
    et ensuite tu fais ta recherche sur chaque mot. Après à toi (ou à l'utilisateur) de décider si tu (il) veux (veut) tous les mots (AND) ou au moins un des mots (OR)

  5. #5
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    comment je pourais faire pour compter le nombre de mots de mon mot clé?
    manganimes (en construction) -
    zemanga

  6. #6
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Il faut que tu fasses une boucle qui construise ta requête : pour chaque mot, donc à chaque itération de boucle, tu concatènes à ta requête un "AND truc like '$cemot'" par exemple, comme ça tu es sûr que si il y a un mot ou 50000 ils seront pris en compte !
    Cependant, il y a des précautions à prendre : s'assurer que les espaces en double ont étés supprimés de la saisie, s'assurer qu'il n'y a pas d'espace en début et en fin de zone et si oui les supprimer, puis se donner une petite sécurité en filtrant les mots qui sont inférieurs strictements à 3 caractères, ainsi tu es sûr que tes recherches seront cohérentes !
    A+
    K

  7. #7
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    ok merci je vois un peu mieu le principe mais je peut faire comment pour compter et séparer les mots?
    manganimes (en construction) -
    zemanga

  8. #8
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Tu peux utiliser la fonction explode().
    K

  9. #9
    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
    Très(trop) simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $mots = explode(' ', $mots_clefs_user);
    $nb = count($mots);
    EDIT: grilled...

  10. #10
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Citation Envoyé par Mr N.
    EDIT: grilled...
    grilled^999 !

    Mais tu as poster un bout de code, ce que je n'ai pas fait
    K

  11. #11
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    ok merci je vais essayer comme ca, je vous tiens au courant .
    manganimes (en construction) -
    zemanga

  12. #12
    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
    grilled^999 !
    Mon excuse: J'etais partis sur l'idée d'expliquer que explode n'allait pas rendre possible la recherche de phrases :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mot-clef ::= '"' phrase '"' | mot
    phrase ::= phrase ' ' mot | mot
    mais je me suis ravisé, prévilégiant la découverte

  13. #13
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    le probleme avec cette methode c'est qu'il risque de donner plusieurs fois le même résulta ( nom prenom et prenom nom) comment je pourais faire pour éviter ca?
    manganimes (en construction) -
    zemanga

  14. #14
    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
    SELECT DISTINCT...

  15. #15
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    ca va marcher avec une boucle?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for &#40;$i=0;$i<$nb1;$i++&#41;
    				&#123;
    					$sql="SELECT DISTINCT `id` FROM `critiquemanga`WHERE `Auteur` LIKE '".$motcle1&#91;$i&#93;."'";
    					echo $sql;
    				&#125;
    manganimes (en construction) -
    zemanga

  16. #16
    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
    non tu extrait tes mots clefs =>
    explode

    tu construit ta requète =>
    si tu veux tout les mots clefs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ... FROM ... WHERE colonne LIKE '%alain%' AND colonne LIKE '%delon%'
    si tu veux au moins un mot clefs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ... FROM ... WHERE colonne LIKE '%alain%' OR colonne LIKE '%delon%'
    Sachant qu'avec OR ce sera lent, si tu peux utiliser UNION c'est mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ... FROM ... WHERE colonne LIKE '%alain%'
    UNION
    SELECT ... FROM ... WHERE colonne LIKE '%delon%'
    Donc oui tu fais une boucle, mais pour construire une requête. Si tu passe par n requetes différentes (comme tu l'as proposé) alors le dédoublonnage devra être fait côté php....

Discussions similaires

  1. Aide pour création moteur de recherche
    Par newsuser dans le forum Réseau/Web
    Réponses: 0
    Dernier message: 27/11/2011, 01h07
  2. Requête SQL pour un moteur de recherche
    Par CrazyCow007 dans le forum Débuter
    Réponses: 3
    Dernier message: 23/06/2010, 14h09
  3. [MySQL] aide pour resultat moteur de recherches
    Par fabrice88 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 17/09/2009, 12h24
  4. [SQL] aide pour requete UPDATE SVP
    Par ganok dans le forum Langage SQL
    Réponses: 9
    Dernier message: 10/03/2005, 10h17
  5. comment faire ma base de donnée pour un moteur de recherche
    Par HoB dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/05/2004, 16h07

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