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

SQL Procédural MySQL Discussion :

Sélection avec IN


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Par défaut Sélection avec IN
    Bonjour,

    Ma base de données MySql est alimentée par diverses sources dont je n'ai pas forcement le contrôle. Résultat des courses, pour certaines informations qui s'y trouvent, j'ai des caractères invisibles (ou spéciaux - j'ai du mal à les identifier) qui viennent fausser mes résultats de requête.

    Je vous explique : je fais un SELECT sur une liste d'emails (via un IN).

    ex : SELECT * FROM inscrit WHERE email IN ('email1@test.fr','email2@test.fr','email3@test.fr','email4@test.fr')

    Ma requête va par exemple me sortir les résultat pour email1, email2 et email3, mais rien pour email4@test.fr

    Pour vérifier je fais un SELECT sur email='email4@test.fr' et en effet je n'ai rien. Par contre si je fais email LIKE '%email4@test.fr%', là j'ai des résultats.

    Dans mon PHPMyAdmin, la valeur apparaît bien sous email4@test.fr. J'ai donc l'impression qu'il y a des caractères spéciaux invisibles qui l'entourent.

    Le problème est que je suis obligé de passer par un IN car je dois pouvoir traiter un grand nombre d'emails.

    J'aimerais donc savoir de quelle alternative je dispose (l'idéal serait un mix entre IN et LIKE). Auriez-vous une solution à me proposer.

    Pour info ma donnée email est un varchar(255)

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    Salut

    Dans un premier temps je passerais les fonctions ltrim et rtrim sur ton champs email

    LTRIM(str) permet de faire sauter les espaces initiaux
    RTRIM(str) permet de faire sauter les espaces finaux

    D'ailleurs pour savoir si c'est bien les espaces qui te posent problème, recherche
    select * from table
    where email like ' email4@... ' ( j'ai rajouter des espaces pour voir si c'est ca !!!)

    Sinon j'ai pa trop d'idées!!!
    Bonne chance

  3. #3
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Si vous souhaitez supprimer tous les espaces initiaux et finaux, sous MySQL la fonction TRIM existe.

    Pour corriger le problème à court terme, exécutez la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE TABLE SET EMAIL=TRIM(EMAIL)
    Pour corriger le problème à moyen terme, revoyez votre script qui va lancer l'insertion de données. Vérifiez que les données sont correctement formatées et donc qu'un trim($mail) (exemple php) est bien executé avant l'insertion.

    Pour corriger le problème sur du plus long terme, pour tous vos développement, avant chaque interraction avec votre base, vérifiez toujours les données (absence de séparateurs type ' " , absence d'espace superflus)
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Par défaut
    Merci pour vos réponses, je vais tester toutes ces pistes.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Par défaut
    J'ai identifié les caractères superflues. Il s'agit de \r\n.

    Du coup j'ai réadapté ma requête comme ceci :

    SELECT * FROM inscrit WHERE REPLACE(email,'\r\n','') IN ('email1@test.fr','email2@test.fr','email3@test.fr','email4@test.fr')

    Il semblerait que cela fonctionne.

    Que pensez-vous de cette solution ?

  6. #6
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Elle est moins bonne que les TRIM. Trim virent les espaces superflus (y compris les retour chariot et retour lignes)
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

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

Discussions similaires

  1. [JTree] Sélection avec clic droit ?
    Par Pill_S dans le forum Composants
    Réponses: 3
    Dernier message: 27/02/2009, 18h04
  2. Sélection avec la souris hors d'une application
    Par carlg dans le forum API, COM et SDKs
    Réponses: 17
    Dernier message: 08/03/2006, 10h02
  3. empecher la sélection avec une fonction
    Par crakocrako dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/03/2006, 13h29
  4. Rêquete de sélection avec des tables associative
    Par snoopy69 dans le forum Access
    Réponses: 2
    Dernier message: 20/02/2006, 15h31
  5. Pb sélection avec Champ vide
    Par Luffy Duck dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/10/2005, 12h11

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