Format table mysql pour stocker dates récurentes

Résolu
cs_hdh Messages postés 140 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 août 2012 - 26 juil. 2011 à 10:48
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 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

3 réponses

cs_hdh Messages postés 140 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 août 2012
3 août 2011 à 17:04
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
3
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
26 juil. 2011 à 14:22
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.
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
3 août 2011 à 17:37
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.
0
Rejoignez-nous