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 :

Réutiliser des données d'une requête dans une requête


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut Réutiliser des données d'une requête dans une requête
    Bonjour,

    J'effectue une requette avec des opérations genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select un, deux, trois, quatre,
    ((un*deux)/trois) AS cinq from matable where 1
    J'aimerais réutiliser cinq dans un autre calcule genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select un, deux, trois, quatre,
    ((un*deux)/trois) AS cinq,
    (cinq + quatre) AS six from matable where 1
    Mais je n'arrive pas a réutiliser la variable cinq .... avez vous une astuce ? cela me permettrais de simplifier ma requette grandement .... car elle fait déja 12 lignes (et 1000 caractères) et j'ai deja perdu pas mal de cheveux ...
    La vie à le gout qu'on lui donne

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 030
    Points : 23 756
    Points
    23 756
    Par défaut
    Bonjour,

    A part utiliser une sous-requête (mais ça risque rapidement de dégrader les performances) ou alors de ré-écrire la totalité de la formule à la fois (parce qu'avec l'alias "cinq", ça ne marche pas), je ne vois pas d'autre solution .

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    Effectivement, il n'y a pas de moyen (à part passer par une vue ou une sous-requête FROM, mais ça semble disproportionné. Tu pourrais commencer par faire les simplifications mathématiques...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT un, deux, trois, quatre,
      un * deux / trois AS cinq,
      un * deux / trois + quatre AS six 
    FROM matable
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    J'ai effectivement une requette assez long que je pense pas pouvoir simplifier facilement, en faite quand je voulais utiliser l'alias "cinq" etais pour remplacer cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((prix * (IF(qtegratosinscription>".$qte.", 0, (".$qte."-qtegratosinscription)))) + prix1 + prix2) AS total,
    On soustrait à la variable "qte" la valeur "qtegratosinscription" et on test si c'est pas inférieur à 0, si c'est le cas on retourne 0


    qui a la base etait cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((prix * ".$qte.") + prix1 + prix2) AS total,
    et à qui je vais encore soustraire quelques chose en effectuant la meme opération que le premier bout de requette.


    Vous voyez le problème ... ca devien vite illisible !
    La vie à le gout qu'on lui donne

  5. #5
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Il y aurait éventuellement les variables, même si ce n'est pas vraiment aux normes...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT un, deux, trois, quatre,
           @tmp := un * deux / trois AS cinq,
           @tmp + quatre AS six 
    FROM matable
    Edit: Attention, l'ordre est important. L'affectation doit apparaitre avant l'utilisation, sinon la valeur de la ligne précédente sera utilisée !

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    Citation Envoyé par mims1664 Voir le message
    J'ai effectivement une requette assez long que je pense pas pouvoir simplifier facilement, en faite quand je voulais utiliser l'alias "cinq" etais pour remplacer cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((prix * (IF(qtegratosinscription>".$qte.", 0, (".$qte."-qtegratosinscription)))) + prix1 + prix2) AS total,
    On soustrait à la variable "qte" la valeur "qtegratosinscription" et on test si c'est pas inférieur à 0, si c'est le cas on retourne 0
    Ça se simplifie déjà comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    prix * GREATEST($qte - qtegratosinscription, 0) + prix1 + prix2
    Tu remarqueras que l'abus des parenthèses et des IF ne simplifie pas l'écriture. Par ailleurs, au niveau de PHP, l'interpolation des variables à l'intérieur des chaînes allège pas mal la syntaxe !
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    Citation Envoyé par Sivrît Voir le message
    Il y aurait éventuellement les variables, même si ce n'est pas vraiment aux normes...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT un, deux, trois, quatre,
           @tmp := un * deux / trois AS cinq,
           @tmp + quatre AS six 
    FROM matable
    En plus lourd mais plus clean, tu peux également créer une fonction... à partir de l'exemple de Sivrît :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE FUNCTION cinq(un INT, deux INT, trois INT) returns FLOAT
    RETURN un * deux / trois ;
     
    SELECT un, deux, trois, quatre,
           cinq(un, deux, trois) as cinq,
           cinq(un, deux, trois) + quatre AS six 
    FROM matable ;
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    Powww Les gars vous êtes des américains du SQL ! (c'est un compliment)

    Je pense qu'avec tout cela je vais pouvoir y voir plus clair. La fonctione me plait bien.

    Je vais tester.

    Merci
    La vie à le gout qu'on lui donne

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    Heuu juste une petite question,
    Comment se serre ton des fonctions en sql ?

    Je n'ai jamais utilisé de fonction sous mysql ... dans un environnement PHP ???

    Ne rigolez pas .. LOL
    La vie à le gout qu'on lui donne

  10. #10
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 030
    Points : 23 756
    Points
    23 756
    Par défaut
    Citation Envoyé par mims1664 Voir le message
    Heuu juste une petite question,
    Comment se serre ton des fonctions en sql ?
    Exactement comme les fonctions "classiques" de MySQL (comme l'a mis Antoun dans son exemple ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT un, deux, trois, cinq(un, deux, trois) AS cinq
    FROM matable...
    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    L'appeler j'ai compris, mais comment on déclare cette fonction dans MYSQL ? c'est comme les procédure stockée ? ou on doit la déclarer a chaques fois avant que l'on doit l'utiliser ?

    Et comment faire ?? j'ai fait quelques test mais sans succès.
    La vie à le gout qu'on lui donne

  12. #12
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    c'est comme les proc stock.
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    Ok merci je vais regardé de ce coté !

    Bonne journée
    La vie à le gout qu'on lui donne

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

Discussions similaires

  1. Charger une JComboBox ou une JList des données d'un champ d'une table dans une BDD.
    Par MasterMbg dans le forum Codes sources à télécharger
    Réponses: 2
    Dernier message: 27/09/2013, 12h16
  2. Réponses: 6
    Dernier message: 22/07/2013, 16h24
  3. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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