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

Langage SQL Discussion :

Est-ce possible de faire une copie de lignes et un update en une seule requête ?


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 414
    Points : 871
    Points
    871
    Par défaut Est-ce possible de faire une copie de lignes et un update en une seule requête ?
    bonjour,

    plutôt que de le faire en language host (php) ou en 2 requêtes sql, je voudrais savoir s'il est possible de faire en SQL ce traitement en une seule requête :

    Sélectionner des lignes suivant un critère, et les dupliquer dans la même table en changeant un champ (c-a-d faire une sélection + une insert + un update)

    Voilà mon cas concrêt simplifié :
    une table de missions pour une semaine , que je voudrais dupliquer en ajoutant 7jour au champ date (pour reconduire les missions d'une semaine à l'autre)

    table missions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    mis_id  mis_date      mis_nom        mis_lieu
    ---------------------------------------------------
    01      2020-08-20   nettoyer        école
    02      2020-09-30   nettoyer        hotel de ville
    03      2020-10-01   nettoyer        parc
    donc , je souhaite reconduire les missions de la semaine en cours (celle ayant id = 2 et id = 3) soit obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    mis_id  mis_date      mis_nom        mis_lieu
    ---------------------------------------------------
    01      2020-08-20   nettoyer        école
    02      2020-09-30   nettoyer        hotel de ville
    03      2020-10-01   nettoyer        parc
    04      2020-10-07   nettoyer        hotel de ville
    05      2020-10-08   nettoyer        parc
    2020-09-30 +7jours = 2020-10-07
    2020-10-01 + 7jours = 2020-10-08


    En pratique,

    1
    je dois en sql sélectionner les lignes de la semaine en cours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM mission WHERE week(mis_date )=week (current)
    2
    je dois les insérer dans la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO missions (mis_date,mis_nom,mis_lieu) 
    VALUES (requête du dessus)
    3 je dois en plus ajouter +7 à la date des dernières missions insérées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE missions SET mis_date=mis_date+7 WHERE mi_id = liste des ids des nouveaux crées

    Je travaille avec mysql, je ne sais pas si c'est possible de faire cela en 1 seule fois plutôt que par PHP.
    y-a-t-il une syntaxe comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO missions (mis_date+7,mis_nom,mis_lieu) 
    VALUES (
     SELECT mis_date, mis_nom, mis_lieu FROM missions WHERE week(mis_date )=week (current)
    )
    vous voyez, j'ai "inventé" le +7 directement dans l'énumération des champs, ça doit pas être normalisé je pense, c'est pour vous montrer mon besoin. peut-être que ça se fait dans une autre syntaxe écrite.


    merci de votre aide, et/ou renseignement.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Oui, c'est possible. Dans ce cas, il ne faut pas utiliser le VALUES et faire directement


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO missions (mis_date,mis_nom,mis_lieu) 
        SELECT DATE_ADD(mis_date, INTERVAL 7 DAY), mis_nom, mis_lieu FROM missions WHERE week(mis_date )=week (current)

  3. #3
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 414
    Points : 871
    Points
    871
    Par défaut
    ah ok, vous avez mis le +7 dans la partie du bas alors que je le supposais dans celle du haut !

    je vais essayer ça !!

  4. #4
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 681
    Points
    1 681
    Par défaut
    Le INSERT INTO est suivi de la destination : Table et colonnes.
    La suite est, sous forme de VALUES ou de SELECT, la source de données à insérer. Les calculs sont donc à ce niveau.

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

Discussions similaires

  1. Est-il possible de faire une requête hiérarchique ?
    Par Christophe Charron dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 21/03/2007, 14h32
  2. Réponses: 2
    Dernier message: 17/08/2006, 14h50
  3. [C#] Est-il possible de faire une référence sans recopie ?
    Par AiSpirit dans le forum EDI/Outils
    Réponses: 8
    Dernier message: 17/07/2006, 09h56
  4. Réponses: 7
    Dernier message: 09/05/2006, 11h30
  5. Est il possible de faire une fusion
    Par boy569 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 07/02/2006, 13h58

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