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 :

Quelle méthode si pas de sous-requête dans FROM clause


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Points : 29
    Points
    29
    Par défaut Quelle méthode si pas de sous-requête dans FROM clause
    Bonjour,

    Je viens de me rendre compte que MySQL n'autorisait pas de sous-requêtes dans la clause FROM pour la création de vues, c'est quand même très dommage... Du coup j'ai jeté un coup d'oeil sur les contournements possibles mais aucun ne m'emballe vraiment question performances... Globalement je veux arriver à ça (qui n'est donc pas possible) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    select 
      US.idUser,
      IFNULL(SVT.score,0) + IFNULL(SC.score,0) as score,
      IFNULL(SVT.score,0) as scoreVoteTruth,
      IFNULL(SC.score,0) as scoreChallenge
    from
      user US
    left join
      (select 
        idUser,
        sum(voteUp) as score
      from truth
      group by idUser) as SVT on SVT.idUser = US.idUser
    left join
      (select 
        idUserTo,
        sum(5) as score
      from challenge
      group by idUserTo) as SC on SC.idUserTo = US.idUser
    Comme alternative je n'ai trouvé que celle ci qui me paraît catastrophique question performances:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select 
      US.idUser,
      IFNULL((select sum(voteUp) from truth where idUser = US.idUser),0)
      + IFNULL((select sum(5) from challenge where idUserTo = US.idUser),0) as score,
      IFNULL((select sum(voteUp) from truth where idUser = US.idUser),0) as scoreVoteTruth,
      IFNULL((select sum(5) from challenge where idUserTo = US.idUser),0) as scoreChallenge
    from
      user US
    Avez-vous en tête une solution un peu plus décente?

    Merci d'avance.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Tu as quel message d'erreur à la création de la vue ?
    Quelle version de MySQL ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    MySQL 5.0.7
    ERROR 1349: View's SELECT contains a subquery in the FROM clause

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Encore une tare de MySQL !

    Je ne vois pas de solution plus simple a priori mais je ne me suis pas vraiment penché sur la requête.

    Apparemment, tu vas devoir te passer de la vue... ou passer à Postresql !

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    oh c'est moche ça

  6. #6
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Juste une suggestion, et si tu remplaçais, dans ton CREATE VIEW, la sous-requête par une vue ...

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Merci pour ta suggestion Maljuna Kris.

    Question performances je pense que tu as raison et qu'il vaut mieux privilégier la création de (sous-)Vues que l'on vient appeler dans notre Vue principale.
    Mais cela m'obligerait à créer des dizaines de nouvelles vues dans ma bases de données qui encombreraient la lisibilité de ma BDD.. donc malheureusement pour l'instant je reste sur la requête plus lente...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour.

    Quelqu'un sait-il si une version de mysql supporte les sous-requêtes dans les vues ? 5.5.x ?

    Merci.
    Dernière modification par ok.Idriss ; 16/05/2012 à 13h00. Motif: SMS

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/04/2014, 13h35
  2. [11g] Sous-requête dans la clause FROM
    Par FANDENEGI dans le forum SQL
    Réponses: 6
    Dernier message: 20/02/2014, 13h50
  3. Besoin d'une sous requête dans la clause ORDER BY
    Par Renand dans le forum Requêtes
    Réponses: 2
    Dernier message: 23/09/2010, 14h41
  4. Sous requêtes dans un SELECT ??
    Par solp dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/03/2006, 15h39
  5. Sous-requête dans la clause Select
    Par Danger dans le forum WinDev
    Réponses: 2
    Dernier message: 24/05/2005, 17h33

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