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 :

Modification de champs d'une table


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Modification de champs d'une table
    Bonjour à toutes et à tous,

    Voilà je me permets de venir ici afin de vous poser une question concernant mySQL et ce après avoir cherché en vain une solution pendant un petit moment. Il s'agit de faire une requête permettant de récupérer, dans ma Base de Données, le prix unitaire des produits de la commande la plus élevée et de modifier les prix de ces produits de 5%, le tout sans passer par la fonction "VIEW".

    Les liens entre les tables de la Base de Données sont les suivants :
    Nom : liens.png
Affichages : 230
Taille : 47,2 Ko

    J'étais parti sur le code suivant (semble fonctionner sous PostGreSQL et le SQL d'Access) :

    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
    UPDATE t_produits SET prod_pu=prod_pu * 0.95
    WHERE prod_nom IN (
       					 SELECT prod_nom
       					 FROM (
                             	         SELECT prod_nom
           						 FROM t_produits
        						 INNER JOIN t_Detcom
        						 ON t_Detcom.det_prod_pk=t_produits.prod_pk
        						 WHERE det_num =(
            						SELECT det_num 
            						FROM t_detcom
           							GROUP BY det_num
            						ORDER BY SUM(det_pu * det_qte * (1-det_remise)) DESC 
            						LIMIT 0, 1
                                     	)
           				)
    			)
    Mais semblerait que celui-ci soit voué à l'échec sous mySQL. Auriez-vous, par hasard des solutions ou des pistes de solution à me soumettre ?

  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 : 60
    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 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Bonjour

    Commencez par résoudre ceci avec une requête SELECT :
    récupérer, dans ma Base de Données, le prix unitaire des produits de la commande la plus élevée
    Pour se faire, écrivez une requête qui cherche la commande dont le montant est le plus élevé puis utilisez celle-ci en sous requête pour récupérer les prix détaillés des articles qui la compose.

    Ensuite, vous pourrez faire votre opération UPDATE en vous servant de cette requête.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci pour votre réponse rapide, mais il me semble que c'est ce que je fais grâce à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT det_num 
    FROM t_detcom
    GROUP BY det_num
    ORDER BY SUM(det_pu * det_qte * (1-det_remise)) DESC 
    LIMIT 0, 1
    Ca me donne la commande dont le montant est le plus élevé.

    Ensuite, ce qui m'intéresse surtout c'est de récupérer les produits étant présents dans la commande ce que je fais grâce à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT prod_nom
    FROM t_produits
    INNER JOIN t_Detcom
    ON t_Detcom.det_prod_pk=t_produits.prod_pk
    WHERE det_num =(
       						SELECT det_num 
      						FROM t_Detcom
    						GROUP BY det_num
       						ORDER BY SUM(det_pu * det_qte * (1-det_remise)) DESC 
            				        LIMIT 0, 1
                   	)
    Il ne me reste donc plus qu'à UPDATE les produits récupérés par le code écrit ci-dessus, ce qui devrait me donner ceci :

    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
    UPDATE t_produits SET prod_pu=prod_pu * 0.95
    WHERE prod_nom IN (
       					 SELECT prod_nom
       					 FROM (
                             	                 SELECT prod_nom
           				                 FROM t_produits
        						 INNER JOIN t_Detcom
        						 ON t_Detcom.det_prod_pk=t_produits.prod_pk
        						 WHERE det_num =(
            						SELECT det_num 
            						FROM t_Detcom
           							GROUP BY det_num
            						ORDER BY SUM(det_pu * det_qte * (1-det_remise)) DESC 
            						LIMIT 0, 1
                                               )
    	                         )
                           )
    Hors là il me sort l'erreur suivante : "#1248 - Every derived table must have its own alias"
    Et c'est là que je suis un peu perdu :/
    Parce qu'au final que je mette des alias à mes tables ou non ça ne change rien ... :/

    Encore merci d'éclairer ma lanterne

  4. #4
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour
    Avez vous essayé en utilisant des jointures et non pas une clause where?

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ELECT prod_nom
    FROM t_produits
    INNER JOIN t_Detcom
    ON t_Detcom.det_prod_pk=t_produits.prod_pk
                 INNER JOIN (
       						SELECT det_num 
      						FROM t_Detcom
    						GROUP BY det_num
       						ORDER BY SUM(det_pu * det_qte * (1-det_remise)) DESC 
            				        LIMIT 0, 1
                   	) as dt2
                      ON t_Detcom.det_num  = dt2.det_num
    PS : pas eu le temps de tester.

    Pierre

Discussions similaires

  1. [CakePHP] Modification de champs dans une table à chaque création d'un nouveau champs
    Par JangoBtz dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 20/03/2014, 15h50
  2. Modification de champ d'une table
    Par m1ro86 dans le forum Access
    Réponses: 6
    Dernier message: 20/12/2006, 09h56
  3. Réponses: 14
    Dernier message: 19/10/2006, 14h23
  4. [MySQL] Problème pour la modification d'un champ d'une table
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 09/02/2006, 17h17
  5. Modification du nom d'un champ dans une table
    Par reef1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/06/2004, 10h55

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