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 :

Sélectionner deux champs du meme nom dans deux tables [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2006
    Messages : 216
    Points : 159
    Points
    159
    Par défaut Sélectionner deux champs du meme nom dans deux tables
    Bonjour à tous,
    J'ai un souci avec une requête MySQL...

    Ce que je veux faire, c'est afficher (avec PHP) le résultat d'une requête. En gros, ça affiche tous les codes postaux référencés dans DEUX tables différentes. Je veux bien entendu que ça ne m'affiche qu'une seule fois un même code postal.
    Quand je n'avais qu'une seule table, j'utilisais la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT postal FROM apg_vinspoints_t WHERE postal NOT LIKE '' ORDER BY postal
    Mais maintenant, j'ai des codes postaux dans deux tables... Alors j'ai utilisé la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT postal FROM apg_vinspoints_t,apg_vinspointssec_t WHERE postal NOT LIKE '' ORDER BY postal
    Evidemment, ça ne marche pas Il me renvoie l'erreur suivante :
    Champ: 'postal' dans field list est ambigu

    Quelqu'un a-t-il une solution ?
    Merci d'avance !

    Clément

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    tu devrais utiliser UNION je pense

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    il suffit de mettre nomtable.nomChamp pour lever l'ambiguité

    un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT apg_vinspoints_t.postal FROM apg_vinspoints_t WHERE apg_vinspoints_t.postal NOT LIKE '' ORDER BY apg_vinspoints_t.postal

  4. #4
    NoT
    NoT est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Février 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 237
    Points : 280
    Points
    280
    Par défaut
    Lut,

    La solution du dessus doit être utilisée, cela dit ya un truc qui m'échappe : tu as 2 champs mais tu ne souhaites en récupérer qu'un des 2, comment est fait ce choix ? il va bien te falloir passer par une fonction qui va traiter cette problématique.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2006
    Messages : 216
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par NoT
    Lut,

    La solution du dessus doit être utilisée, cela dit ya un truc qui m'échappe : tu as 2 champs mais tu ne souhaites en récupérer qu'un des 2, comment est fait ce choix ? il va bien te falloir passer par une fonction qui va traiter cette problématique.
    Heu non, c'est le contraire, j'ai deux champs mais je veux récupérer LES DEUX .
    Je m'explique. J'ai deux tables concernées par mon problème là. Dans les deux, il y un champ en commun : "postal", qui est un code postal.
    Ce que je veux, c'est faire une liste de TOUS les codes postaux, des deux tables (évidemment, je veux éviter les doublons dans la liste !).
    Sachant qu'il peut y avoir un même code postal dans ma table1 et ma table2, c'est pour ça que je ne fais pas deux requêtes .

    Vala

    Citation Envoyé par badcur
    il suffit de mettre nomtable.nomChamp pour lever l'ambiguité

    un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT apg_vinspoints_t.postal FROM apg_vinspoints_t WHERE apg_vinspoints_t.postal NOT LIKE '' ORDER BY apg_vinspoints_t.postal
    Il me renvoie une erreur de synthaxe si je mets les deux tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT apg_vinspoints_t.postal,apg_vinspointssec_t.postal FROM apg_vinspoints_t,apg_vinspointssec_t WHERE apg_vinspoints_t.postal,apg_vinspointssec_t.postal NOT LIKE '' ORDER BY apg_vinspoints_t.postal
    Erreur de syntaxe pr�s de 'apg_vinspointssec_t.postal NOT LIKE ''' � la ligne 1

    Merci en tout cas pour vos réponses

  6. #6
    NoT
    NoT est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Février 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 237
    Points : 280
    Points
    280
    Par défaut
    .. WHERE apg_vinspoints_t.postal NOT LIKE '' AND apg_vinspointssec_t.postal NOT LIKE ''
    ca ira mieux, d'ailleurs évite d'utiliser le like qd yen a pas besoin , c'est une fonction gourmande en ressources.

    .. WHERE apg_vinspoints_t.postal <> '' AND apg_vinspointssec_t.postal <> ''
    c'est encore mieux

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2006
    Messages : 216
    Points : 159
    Points
    159
    Par défaut
    Oups, je n'avais pas vu la remarque concernant UNION (merci ! ), j'ai donc essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $req=mysql_query("SELECT DISTINCT postal FROM apg_vinspoints_t WHERE apg_vinspoints_t NOT LIKE '')
    		UNION (SELECT DISTINCT postal FROM apg_vinspointssec_t WHERE apg_vinspointssec_t NOT LIKE '') ORDER BY postal ")	
    		or die ("Erreur de connexion a la BDD : ".mysql_error());
    Et ça marche !!!
    Merci beaucoup pour votre patience !

    Edit :
    Citation Envoyé par NoT
    ca ira mieux, d'ailleurs évite d'utiliser le like qd yen a pas besoin , c'est une fonction gourmande en ressources.



    c'est encore mieux
    Merci aussi !
    C'est vrai que LIKE est gourmand, et pourtant dans les fonctions recherche j'en abuse .
    Grâce à vous j'en apprends tous les jours Merci mille fois

    PS : ... je crois que je reviendrai

  8. #8
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    Ceci ne conviendrait pas?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SELECT DISTINCT postal FROM apg_vinspoints_t WHERE postal NOT LIKE '' ORDER BY postal 
    UNION
    SELECT DISTINCT postal FROM apg_vinspointssec_t WHERE postal NOT LIKE '' ORDER BY postal

    Edit : je suis un peu trop lent ... il ya juste le order qui ne sera pas respecté sur lensemble des 2tables

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2006
    Messages : 216
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par Cybher
    Ceci ne conviendrait pas?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SELECT DISTINCT postal FROM apg_vinspoints_t WHERE postal NOT LIKE '' ORDER BY postal 
    UNION
    SELECT DISTINCT postal FROM apg_vinspointssec_t WHERE postal NOT LIKE '' ORDER BY postal

    Edit : je suis un peu trop lent ... il ya juste le order qui ne sera pas respecté sur lensemble des 2tables
    Merci quand même
    Il me renvoie l'ensemble dans l'ordre. Je pense que "ma" syntaxe est mieux non ?

  10. #10
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    en effet c'est pas plu mal..
    par contre comme le dit NOT évite les like quand ils ne sont pas nécessaires

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2006
    Messages : 216
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par Cybher
    en effet c'est pas plu mal..
    par contre comme le dit NOT évite les like quand ils ne sont pas nécessaires
    Histoire de combler un peu mes énormes lacunes, j'aimerais savoir : quand LIKE est-il nécessaire ?
    Dans un cas où un cherche '%$var%' (ou '%$var', '$var%') ? Pas dans un cas où on cherche une exactitude c'est ça ?

    Ensuite, <> remplace NOT LIKE. Qu'est-ce qui remplace LIKE ?
    (c'est assez pénible à trouver sur Google ces infos là :s ... <> en mot clé ça le fait pas ^^)

  12. #12
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    en fait un like est utile quand tu recherches une approximation (en utilisant %)

    le <> signifie en fait différent. ce nest donc pas léquivalent de not like (qui lui cherche ce qui ne contient pas une certaine chaine

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2006
    Messages : 216
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par Cybher
    en fait un like est utile quand tu recherches une approximation (en utilisant %)

    le <> signifie en fait différent. ce nest donc pas léquivalent de not like (qui lui cherche ce qui ne contient pas une certaine chaine
    Merci pour les explications !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/06/2011, 16h04
  2. Réponses: 7
    Dernier message: 29/08/2008, 12h16
  3. Réponses: 4
    Dernier message: 10/10/2007, 15h31
  4. [MySQL] Récuéprer deux champs au meme nom dans un Innerjoin
    Par easyjava dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 06/10/2006, 12h25
  5. FieldbyName => deux champs du meme nom
    Par dacid dans le forum Bases de données
    Réponses: 2
    Dernier message: 13/01/2005, 14h05

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