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

Requêtes MySQL Discussion :

Requete complexe, help !


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut Requete complexe, help !
    J'explique mon problème, j'ai 4 tables utilisateurs :

    Utilisateur_professionnel(#id_pro, nom_pro, mail_pro, payé_pro, cat_pro...)
    Utilisateur_amateur(#id_amateur, nom_amateur, mail_amateur, cat_amateur, payé_amateur...)
    Utilisateur_asso(#id_asso, nom_asso, mail_asso, payé_asso, cat_asso...)


    Par la suite pour certains besoins, il a fallu faire une table pour tous les utilisateurs, on a donc une table utilisateur qui a son id propre et l'id de la table utilisateur d'ou il provient, et pour differencier les identifiants étranger on a un champs avec le nom de la table d'ou il provient (dans le champ "table_utilisateur" on aura "utilisateur_professionnel" ou utilisateur_amateur" ou "utilisateur_asso")

    utilisateurs(#id_utilisateur, id_foreigner, table_utilisateur, mail_utilisateur, bonus)

    Donc voila, la base n'est pas forcement réalisée dans les regle de l'art, mais j'herite de cette base en production, elle n'est pas modifiable.
    Ce que je souhaite extraire dans une requete c'est : la liste de tous les utilisateurs qui font partie de la catégorie "test", classés selon qu'ils aient payé (champs payé a oui ou non) et selon leur bonus (dans la table utilisateur).

    Le probleme que j'ai c'est que je n'arrive pas a faire la jointure entre la table utilisateurs et les autre tables car le champs id_foreigner n'est pas vraiment unique. Comme il existe un champs unique qui est l'adresse mail, voila ce que j'avais fait :

    SELECT nom_pro AS nom, bonus AS bonus, payé_pro AS paye FROM utilisateur_pro, utilisateurs WHERE cat_pro = "test"
    AND mail_pro = mail_utilisateur
    union
    SELECT nom_amateur, bonus, paye_amateur FROM utilisateur_amateur, utilisateurs WHERE cat_amateur = "test"
    AND mail_amateur = mail_utilisateur
    union
    SELECT nom_asso, bonus, paye_asso FROM utilisateur_asso, utilisateurs WHERE cat_asso = "test"
    AND mail_asso = mail_utilisateur
    GROUP BY paye_u
    ORDER BY nom, bonus

    Une erreur 1054 m'est retournée, alors je voulais savoir si il y avait des erreurs dans cette requete et si il n'y avait pas d'autre méthode pour la realiser.

    Cordialement.

  2. #2
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 169
    Par défaut
    Si tu donnais le message d'erreur complet ca pourrait aider, parce que juste le numéro... on est pas des machines

  3. #3
    Membre chevronné Avatar de rberthou
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 612
    Par défaut
    Citation Envoyé par drichnifu Voir le message
    SELECT nom_pro AS nom, bonus AS bonus, payé_pro AS paye FROM utilisateur_pro, utilisateurs WHERE cat_pro = "test"
    AND mail_pro = mail_utilisateur
    union
    SELECT nom_amateur, bonus, paye_amateur FROM utilisateur_amateur, utilisateurs WHERE cat_amateur = "test"
    AND mail_amateur = mail_utilisateur
    union
    SELECT nom_asso, bonus, paye_asso FROM utilisateur_asso, utilisateurs WHERE cat_asso = "test"
    AND mail_asso = mail_utilisateur
    GROUP BY paye_u
    ORDER BY nom, bonus
    Remplace deja
    ORDER BY nom, bonus
    par
    ORDER BY 1, 2
    qui fonctionne sur toutes les bases

    Par conter je ne comprend pas le
    GROUP BY paye_u
    paye_u n'est pas def si je me trompe pas

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut
    En fait c'est GROUP BY paye, parce que je souhaite regrouper ceux qui ont payé et ceux qui ont pas payé.

    Mais n'y a t'il pas une possibilité de faire la requete autrement par exemple en faisant une jointure conditionnelle, par exemple la jointure serait id_foreigner=utilisateur_pro.id_pro SI table_utilisateur = "utilisateur_pro" sinon si table_utilisateur ="utilisateur_amateur" alors id_foreigner = utilisateur_amateur.id_amateur ...
    est il possible de faire cela ?

  5. #5
    Membre chevronné Avatar de rberthou
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 612
    Par défaut
    Tu peux faire cela également :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     SELECT nom_pro AS nom, payé_pro AS paye, 
             (select bonus from utilisareur where id_foreigner = id_pro) as bonus
      FROM utilisateur_pro
     WHERE cat_pro = "test"
       AND mail_pro = mail_utilisateur
    union ...

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut
    A ouai merci de ta réponse j'avais pas pensé à cela.
    Et effectivement le group by ne sert a rien, c'est un order by qu'il fallait faire.
    Merci de vos réponse.

    Mais juste par curiosité, est il possible de faire des conditions avec des if dans les requetes ?

  7. #7
    Membre chevronné Avatar de rberthou
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 612
    Par défaut
    Citation Envoyé par drichnifu Voir le message
    Mais juste par curiosité, est il possible de faire des conditions avec des if dans les requetes ?
    Pas a ma connaissance en pur SQL , par contre cela est faisable dans une procedure stocké.

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

Discussions similaires

  1. requete complexe help
    Par donny dans le forum SQL
    Réponses: 14
    Dernier message: 02/08/2009, 12h53
  2. requete complexe
    Par nicohugo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/03/2006, 09h10
  3. Requete complexe
    Par d1g-2-d1g dans le forum Langage SQL
    Réponses: 9
    Dernier message: 02/05/2005, 15h47
  4. Requete complexe
    Par Pfeffer dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/02/2005, 18h42
  5. requete complexe
    Par Thunder_nico dans le forum Langage SQL
    Réponses: 8
    Dernier message: 07/10/2004, 12h36

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