Requete pour une date supérieure a 30 jours a la date du jour

Petit nouveau ! | 7 Messages

30 janv. 2019, 11:29

Bonjour,

J'ai besoin de faire une requête pour supprimer un lien entre deux tables, pour une date supérieure a 30 jours.

Je voudrais faire tourner cette requête tous les soirs en automatique

Je pensais dans un premier temps utiliser la fonction suivante une fois par mois :

"((({# FILTER_DATE ('AM_EMPLOYEE.END_OF_CONTRACT', ' BEFOREMONTHS', '1') #})) AND (AM_EMPLOYEE.END_OF_CONTRACT is not null))"

Mais finalement, je voudrais qu'elle tourne tous les soirs, et je pensais donc utiliser la requete :
DELETE FROM AM_EMPLGROUP WHERE EMPLOYEE_ID IN
(SELECT EMPLOYEE_ID FROM AM_EMPLOYEE WHERE END_OF_CONTRACT < now()-30)

Mais cela ne marche pas

Petit nouveau ! | 7 Messages

30 janv. 2019, 11:30

A la place du now, j'ai aussi utilisé today, mais idem

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8217 Messages

30 janv. 2019, 11:54

La question que tu dois te poser c'est comment soustraire 30 jours à la date actuelle.

Vu le format renvoyé par la fonction NOW() :
https://sql.sh/fonctions/now
Je doute fortement que "NOW()-30" donne ce que tu veux.
Et tu peux le vérifier assez simplement en affichant le résultat avec cette requête :
SELECT NOW()-30;

Voici la liste des fonctions MySQL qui permettent de manipuler les dates :
https://dev.mysql.com/doc/refman/5.5/en ... tions.html
Je te laisse chercher un peu laquelle serait la plus pertinente pour ton besoin ;-)
Un indice : soustraire en anglais se dit subtract
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 7 Messages

30 janv. 2019, 12:16

DateDiff() ;-)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8217 Messages

30 janv. 2019, 12:25

DateDiff() ;-)
Perdu !
DATEDIFF() c'est pour soustraire 2 dates et obtenir le nombre de jours.

C'en est un autre pas très loin dans la liste :D
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 7 Messages

30 janv. 2019, 13:02

Je dirais Datesub ...

Petit nouveau ! | 7 Messages

30 janv. 2019, 13:11

SELECT DATE_SUB("2019-01-30", INTERVAL -1 MONTH);

Mais puis je remplacer le 2019-01-30 par current_date() ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8217 Messages

30 janv. 2019, 13:17

Gagné ! :-D

Et oui tu peux remplacer la date par une autre fonction MySQL qui va te donner la date du jour comme CURRENT_DATE()

Par contre DATE_SUB fait déjà une soustraction donc instinctivement j'aurai donné un intervalle d'1 mois et non pas de "-1" mois...
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 7 Messages

30 janv. 2019, 13:20

Merci pour votre aide, je vais tenter ça.

Merci Arthur pour ta célérité

Et effectivement, ce sera bien 1, et non -1

Petit nouveau ! | 7 Messages

31 janv. 2019, 12:06

Bon, ben cela ne fonctionne pas, pourtant je pense avoir fait ce qui était dit .
Ma requete : UPDATE AM_EMPLOYEE SET PROFIL_ID = NULL
WHERE EMPLOYEE_ID IN
(SELECT EMPLOYEE_ID FROM AM_EMPLOYEE WHERE date_SUB((curdate), INTERVAL 30 day)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8217 Messages

31 janv. 2019, 22:34

Relis bien ton SELECT (et vérifie le dans phpmyadmin) ;-)
Quand tout le reste a échoué, lisez le mode d'emploi...