2010-08-21 5 views
0

J'ai une table qui a les champs suivantsMysql Choisir un enregistrement basé sur la dernière course

project_name  VARCHAR (100) 
running_frequency enum ('daily', 'weekly', 'monthly') 
last_job_run  DATETIME 

Je veux sélectionner les enregistrements qui sont dus maintenant basés sur le champ last_job_run. Par exemple, si une tâche a été exécutée hier et que tous les jours sont sélectionnés, j'ai besoin d'une requête pour sélectionner l'enregistrement pour aujourd'hui, demain et ainsi de suite.

Est-il possible de le faire sans impliquer PHP?

Répondre

3

Utilisation:

SELECT t.* 
    FROM TABLE t 
WHERE ( t.running_frequency = 'daily' 
     AND t.last_job_run < CURRENT_DATE) 
    OR ( t.running_frequency = 'weekly' 
     AND t.last_job_run <= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)) 
    OR ( t.running_frequency = 'monthly' 
     AND t.last_job_run <= DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH)) 

Cela peut courir plus vite comme instruction UNION:

SELECT x.* 
    FROM TABLE x 
WHERE x.running_frequency = 'daily' 
    AND x.last_job_run < CURRENT_DATE 
UNION ALL 
SELECT y.* 
    FROM TABLE y 
WHERE y.running_frequency = 'weekly' 
    AND y.last_job_run <= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY) 
UNION ALL 
SELECT z.* 
    FROM TABLE z 
WHERE z.running_frequency = 'monthly' 
    AND z.last_job_run <= DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH) 
+0

Merci! Vous économisez la vie. – Maximus

Questions connexes