Format table mysql pour stocker dates récurentes [Résolu]

cs_hdh 140 Messages postés mardi 3 juin 2003Date d'inscription 20 août 2012 Dernière intervention - 26 juil. 2011 à 10:48 - Dernière réponse : TychoBrahe 1310 Messages postés samedi 31 janvier 2009Date d'inscription 5 juin 2013 Dernière intervention
- 3 août 2011 à 17:37
Bonjour
Je voudrais faire une sort de module GTD ("Get Things Done" : sorte d'agenda pour l'aide à la gestion de projet) en php & mysql.
Pour cela je vais associer des 'actions à mener' à des dates... pour ce qui est des dates absolues (exemple 'à faire pour le jeudi 12 avril 2012') cela ne pose pas de soucis... par contre pour ce qui est des dates récurrentes je ne sais pas trop comment m'y prendre (exemple : 'à faire tous les 25 décembre', 'à faire tous les premiers jours du mois').
Ce genre de fonctionnalité se retrouve très communément dans outlook ou google-agenda ou les services de cron.

Auriez vous des pistes de réflexion, des exemples de script (le plus proche que j'ai trouvé est http://www.phpcs.com/code.aspx?ID=31246 ) ?

>> Ma question est : quel est le dessin d'enregistrement optimal pour stocker des dates d'actions récurrentes ?

D'avance grand merci pour vos conseils avisés !!
Cordialement
H

le temps n'épargne pas ce que l'ont fait sans lui.. le php non plus
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
cs_hdh 140 Messages postés mardi 3 juin 2003Date d'inscription 20 août 2012 Dernière intervention - 3 août 2011 à 17:04
3
Merci
bonjour,
Merci pour l'atricle : très intéressant !
en afit j'ai changé d'épaule en ce qui concerne mon script en me basant sur une top idée
http://www.weberdev.com/ViewArticle/Date-Arithmetic-With-MySQL

grosso modo :
$query2 "UPDATE tasks SET `date` DATE_ADD(`date`, INTERVAL `interval` " . $typeArray[$row->type] . " ) WHERE id = '" . $row->id . "'";
$result2 = mysql_query($query2) or die("Error in query: " . mysql_error()); } 


avec une table de ce type


The "id" column stores a unique identifier for each task. This identifier is created by MySQL by automatically incrementing the identifier of the previous record.

The "msg" column stores a message describing the task.
The "type" column specifies the type of recurrence, whether daily (D), monthly (M) or yearly (Y).
The "interval" column specifies the interval between each recurrence of the task.
The "date" column specifies the date on which the task will run next.
The "owner" column specifies the email address to which the task notification should be sent.


mysql> INSERT INTO tasks (`id`, `msg`, `type`, `interval`, `date`,
mysql> `owner`)
VALUES ('', 'Run once', 'D', 0, '2003-06-25', 'webmaster@domain');



parfaitement adapté à ma problématique :-)
merci
H


le temps n'épargne pas ce que l'ont fait sans lui.. le php non plus

Merci cs_hdh 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_hdh
TychoBrahe 1310 Messages postés samedi 31 janvier 2009Date d'inscription 5 juin 2013 Dernière intervention - 26 juil. 2011 à 14:22
0
Merci
Salut,

Pour ma part, je serais tenté d'utiliser un simple VARCHAR (ou autre type du même genre) afin de stocker la représentation ISO 8601 de la date ou de la répétition de la tâche. Je t'invite à lire au moins la page wikipedia de cette norme qui est très intéressante pour représenter sous forme de chaine de caractère les dates et heures absolus, leurs intervals et les répétitions.
Commenter la réponse de TychoBrahe
TychoBrahe 1310 Messages postés samedi 31 janvier 2009Date d'inscription 5 juin 2013 Dernière intervention - 3 août 2011 à 17:37
0
Merci
Avec ton système comment peut-tu représenter, par exemple "12 occurrences séparées entre elles de un an et deux mois, en commençant la première le 12 avril 1985 à 23h20 et cinquante secondes". Au format ISO 8601 c'est R12/1985-04-12T23:20:50/P1Y2M. On peux continuer très longtemps sur la description des cas non gérés par ton système car ils sont nombreux.

Le système que tu veux utiliser est beaucoup trop limité, tu perd bêtement des fonctionnalités en et plus tu te retrouves avec des champs superflus. Sérieusement, tu devrais remplacer les champs type, interval et date par un seul champ stockant l'ISO 8601 de la tâche, en plus de simplifier ton schémas de db tu ajoute des tonnes de fonctionnalités d'un seul coup. Seule la sélection des entrées sera un peu plus complexe... et encore pas certain.

J'ajouterais que interval est un mot clé réservé par MySQL. Bien qu'il soit possible de l’utiliser avec l'aide de backquotes (`interval`), ceci reste une mauvaise idée de nom de champ. Il en est de même avec date, bien que vu le nombre incroyable de mauvais développeurs, MySQL a permis d'utiliser ce mot clé sans avoir besoin des backquotes.
Commenter la réponse de TychoBrahe

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.