2010-11-05 9 views
0

J'ai la question suivante:Intervalle de startdate après la date actuelle

Ceci est ma table Créer:

CREATE TABLE `mod_users` (
    `u_id` int(11) NOT NULL auto_increment, 
    `u_date` datetime NOT NULL, 
    `u_type` int(1) NOT NULL default '', 
    `u_adddate` datetime NOT NULL, 
    PRIMARY KEY (`u_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

u_type contient un int (DOH), qui représentent un type d'intervalle.

1 = one week 
2 = two weeks 
3 = one month 
4 = one year 

Je veux choisir la première date postérieure à la date qui tombe dans l'intervalle de la u_type - un jour (si un semaine devient 6 jours, 2 semaines devient 13 jours, un mois devient: 1 mois - 1 jour, un an devient: un an -1 jour) avec un début de u_date. Cela semble déroutant.

Un exemple: Si un utilisateur a le type 1 (une semaine) Et u_date 2010-11-01 00:00:00 (il y a quatre jours) Je veux obtenir la première occurrence après une semaine. Dans ce cas 'SELECT DATE_ADD(u_date,INTERVAL 6 DAYS) from mod_users WHERE u_id = 1'; (ce qui donne 2010-11-07 00:00:00) Comment puis-je le faire pour u_type 3 ou 4? quelque chose comme 'SELECT DATE_ADD(u_date,INTERVAL 1 MONTH - 1 DAYS) from mod_users WHERE u_id = 1'; ?? Ce n'est pas une requête valide.

Aussi si la date du jour serait 2010-11-08 Je veux obtenir la première occurrence après cette date. Dans ce cas, 2010-11-14. 00:00:00 Cela rejeter cette requête 'SELECT DATE_ADD(u_date,INTERVAL 6 DAYS) from mod_users WHERE u_id = 1'; Cause 6 jours n'est pas le bon intervalle à cette requête.

Espérons que certains d'entre vous peuvent vous aider? Je peux utiliser php et mysql donc ces requêtes sont juste utilisées comme exemple. Je suis vraiment coincé ici, donc des indices ou des indices seraient appréciés.

+0

En attendant, j'ai le premier problème abordé avec SELECT u_date - INTERVALLE 1 JOUR + INTERVALLE 1 MOIS EN C depuis mod_users O WH u_id = 1 – Tim

Répondre

1

Dans MySQL, vous pouvez ajouter des intervalles directement dans un champ datetime. Par conséquent, u_date + INTERVAL 1 MONTH - INTERVAL 1 DAY devrait fonctionner correctement.

+0

J'ai découvert. Voir mon commentaire il y a quelques minutes :) – Tim

Questions connexes