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 :
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 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
2020-09-30 +7jours = 2020-10-07
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-10-01 + 7jours = 2020-10-08
En pratique,
1
je dois en sql sélectionner les lignes de la semaine en cours :
2
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM mission WHERE week(mis_date )=week (current)
je dois les insérer dans la table
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
1
2 INSERT INTO missions (mis_date,mis_nom,mis_lieu) VALUES (requête du dessus)
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 :
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.
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) )
merci de votre aide, et/ou renseignement.
Partager