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 :

Autocomplétion dans un moteur de recherche - Ajouter un zéro devant certaines villes à arrondissement [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 181
    Par défaut Autocomplétion dans un moteur de recherche - Ajouter un zéro devant certaines villes à arrondissement
    Bonjour,

    J'ai un moteur de recherche qui permet, par l'autocomplétion, d'afficher les villes disponibles dans ma base selon le mot clé tapé de l'internaute.

    Seulement voilà, j'ai un problème avec les villes à arrondissement comme Paris.

    J'aimerais que lorsqu'on tape "Paris 1", cela m'affiche non seulement tous les "Paris 11, Paris 12, Paris 13", mais aussi "Paris 01". Or, pour l'instant, je n'ai que les "Paris 11, Paris 12, Paris 13...".

    Voici ma requête SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $query_reg = $query;
            $sql = "SELECT id,nom,cp,dept 
                  FROM blo_search_suggest
                  WHERE `nom` REGEXP'(".$query_reg.")'
                  order by LOCATE('".$query."',`nom`) ASC, nom asc limit $limit";
    La requête voulu serait donc quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT id, nom, cp, dept
    FROM blo_search_suggest
    WHERE `nom`
    REGEXP '(paris 01|paris 1)'
    ORDER BY LOCATE( 'paris 1', `nom` ) ASC , nom ASC
    Sur mon moteur, je tape "Paris 1".
    Je ne sais pas quoi faire de $query_reg pour ajouter "paris 01|" dans la requête car pour le moment, $query_reg est seulement égal à "paris 1".

    Pouvez-vous m'aider svp ?

    Y a-t-il une fonction PHP qui permette d'ajouter un 0 dès qu'un champ numérique est tapé ?

    Merci d'avance pour votre aide.

    Bonne fin de journée et à bientôt.

    Sandy

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Par défaut
    bon je suis pas sur que ce soit très optimum mais de mon coté j'aurais tenté cela différemment, en testant chaque "particules" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    $nom = 'Paris 1';
    $tab = explode (' ',$nom);
    $req ='SELECT id, nom, cp, dept FROM blo_search_suggest WHERE ';
    $req.="nom LIKE '".$tab[0]."%' ";
    if(count($tab)>0){
    	for ( $i=1;$i < count($tab);$i++){
    	$req.="AND nom LIKE '%".$tab[$i]."%' ";
    	}
    }
    $req.="ORDER BY  nom  ASC   ";

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 181
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    Effectivement, je pense qu'il manque quelque chose au niveau de l'explode pour faire la boucle seulement si on a un chiffre ensuite.

    Pour ce que vous proposez, nous risquons d'avoir autant de "AND nom LIKE '%XXX%' que d'espace.

    Par exemple, j'ai une ville qui s'appelle : Camp de la Valbonne

    ça m'aurait donné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    AND nom LIKE '%de%'
    AND nom LIKE '%la%'
    AND nom LIKE '%Valbonne%'
    ce qui ne pourra pas fonctionner...

    Du coup, est-ce que quelqu'un aurait une autre proposition ?

    Vous remerciant par avance, je vous souhaite une très bonne journée.

    A bientôt.

    Sandy

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 181
    Par défaut
    Une solution qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $query = "paris 1";
    $query_reg = strtr($query, array(' '=>'.*'));
    $sql = "SELECT id,nom,cp,dept 
          FROM blo_search_suggest
          WHERE `nom` REGEXP'(".$query_reg.")'
          order by LOCATE('".$query."',`nom`) ASC, nom asc limit 10";
    Merci quand même

    Bonne journée.

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Par défaut
    Certes c'est plus esthétique, mais cela reviens à faire la même chose

    Pas de soucis à enchainer des AND LIKE %var%, juste vérifier que var != ''

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

Discussions similaires

  1. Calcul de la pertinence des mots dans un moteur de recherche
    Par kilian67 dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 04/10/2012, 15h13
  2. Réponses: 5
    Dernier message: 16/05/2007, 23h25
  3. [REGEXP] accents dans un moteur de recherche
    Par Raideman dans le forum Langage
    Réponses: 3
    Dernier message: 03/11/2006, 11h29
  4. Enlever Les Indexations Dans Les Moteurs De Recherche
    Par RICHARD1232 dans le forum Sécurité
    Réponses: 2
    Dernier message: 26/06/2006, 21h13
  5. Comment référencer mon site dans les moteurs de recherches ?
    Par Viper7 dans le forum Référencement
    Réponses: 9
    Dernier message: 07/06/2006, 23h18

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