Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/12/2010, 23h51   #1
 
Inscription : décembre 2010
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 6
Points : -1
Points : -1
Par défaut Planning PHP & MySQL

Bonjour,

J'ai une table 'utilisateurs' contenant toutes les informations nécessaires (nom prénom identifiant mot de passe etc...)

Je gère donc de manière dynamique la création/modification/suppressions de ceux-ci.

J'ai ensuite un calendrier PHP, affiché mois par mois, sur lequel apparaît chaque jours (1 -> 30/31) ainsi que chaque utilisateur soumit au planning.

Chaque utilisateur aura donc pour chaque jour du mois un horaire spécifié, ou, un repos etc...

La question est un peu bête, mais comment stocker tout ça dans MySQL ?

Personnellement j'avais pensé a ça, mais ça me semble pas très pratique:

Je crée une table 'planning' avec une colonne DATE de type DATE (2010-12-12 par exemple), ou chaque création de journée dans le planning crée un ligne supplémentaire.

Ensuite, je pensais, a chaque création d'un utilisateur dans ma table 'utilisateur' ajouter une colonne dans ma table 'planning'.

Donc pour chaque journée créer dans le planning, il y aura un colonne pour chaque personne soumise au planning.

C'est une possibilité, sauf que pour le moment il n'y a que 20 personnes environ soumissent à se planning, donc au pire, il y aura donc 20 colonnes dans ma table 'planning'.
Le souci est que ce planning peut être amené à être utilisé pour 150 personnes, ce qui ne me semble pas être un solution optimale...

Avez-vous une autre idée dans la manière de concevoir le planning ?
Ou est-ce la seule méthode?

Merci !
Dime313 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 09h05   #2
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Je me souviens avoir fait ça un jour en cours. Enfin, à peu près.

Ca ressemblait à un truc du genre:

Table jours, table utilisateurs

Dans jours tu as l'id de l'utilisateur, la date du jour, un champs texte libre du style=> 9h/12h ou "congé".

Ensuite pas besoin de table mois. Tout se passe sur le champs "date" de la table jour.

Pour le mois de janvier tu fais une requête du style

Code sql :
1
2
 
SELECT * FROM jour WHERE date BETWEEN '2010-12-31' AND '2011-02-01' ;
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 09h19   #3
Membre éprouvé
 
Avatar de defcon_suny
 
Développeur informatique
Inscription : décembre 2006
Messages : 436
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2006
Messages : 436
Points : 486
Points : 486
Salut,

C'est peut-être pas la meilleure méthode mais voici ma façon de procéder.

Autre que la table utilisateur, il y a une table "evenements" qui comprend

Citation:
un identifiant
un timestamp de départ
un timestamp de fin
un type d'évènement (congé, maladie, autre...)
et enfin une clé étrangère sur l'id de l'utilisateur
Qu'en pensez-vous??
defcon_suny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 10h17   #4
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Une table utilisateur => tu l'as déjà
Une table planning => champs : id - date/heure - type d'événement
Une table utilisateur/planning => champs : idUtilisateur - idPlanning

A partir de là pas besoin de rentrer des données pour chaque utilisateur chaque jour. Tu insères des données que lorsque effectivement il se passe quelque chose pour cet utilisateur.

Pour l'affichage de ton calendrier il ne te reste plus qu'a faire une requête avec jointure sur les 3 tables pour la période de temps voulue. Tu obtiendras un tableau de tous les évènements du mois pour chaque utilisateur.

Citation:
Envoyé par defcon_suny
Qu'en pensez-vous??
Je suis pas super fan des timestamp. un datetime est tout aussi efficace et pas soumis à l'éventuel bug de 2038
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 11h24   #5
Membre éprouvé
 
Avatar de defcon_suny
 
Développeur informatique
Inscription : décembre 2006
Messages : 436
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2006
Messages : 436
Points : 486
Points : 486
Citation:
Envoyé par grunk Voir le message
Une table utilisateur/planning => champs : idUtilisateur - idPlanning
Pourquoi cette table? un évènement correspondra toujours à un et unique utilisateur

Citation:
Envoyé par grunk Voir le message
Je suis pas super fan des timestamp. un datetime est tout aussi efficace et pas soumis à l'éventuel bug de 2038
Moi non plus, mais la comparaison des dates et quand même plus aisée et rapide avec l'utilisation direct de timestamp. Quant au bug éventuel de 2038... ca me paraît un peu léger comme argument ;-)
defcon_suny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 11h30   #6
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Soit dit en passant, d'ici là, quasiment tous les systèmes seront sous 64bits donc le timestamp qui plante.... J'y crois pas.
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 11h38   #7
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Citation:
Envoyé par defcon_suny Voir le message
Pourquoi cette table? un évènement correspondra toujours à un et unique utilisateur
Pour essayer de normaliser au maximum le schema de bdd , voir ici pour plus d'info , mais aussi parce que rien ne nous dis que demain on voudra pas attribuer l'événement X à 12 personnes.

Citation:
Envoyé par defcon_suny Voir le message
Moi non plus, mais la comparaison des dates et quand même plus aisée et rapide avec l'utilisation direct de timestamp. Quant au bug éventuel de 2038... ca me paraît un peu léger comme argument ;-)
Un datetime n'est pas moins facile à traiter qu'un timestamp, toutes les fonctions de date et de comparaison s'y applique. Le timestamp est pour le moment compris entre 1970 - 2038 ce qui n'est pas le cas du datetime. Alors certes dans 5 ans on auras tous des serveur 64bit mais c'est juste dommage de parier sur un changement de technos pour assurer la pérénité d'une appli plutot que de s'appuyer sur quelque chose qui marche déjà maintenant et marchera demain (enfin jusqu'en 9999 ...).
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 11h52   #8
Membre éprouvé
 
Avatar de defcon_suny
 
Développeur informatique
Inscription : décembre 2006
Messages : 436
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2006
Messages : 436
Points : 486
Points : 486
Citation:
Envoyé par grunk Voir le message
Pour essayer de normaliser au maximum le schema de bdd , voir ici pour plus d'info , mais aussi parce que rien ne nous dis que demain on voudra pas attribuer l'événement X à 12 personnes.


Un datetime n'est pas moins facile à traiter qu'un timestamp, toutes les fonctions de date et de comparaison s'y applique. Le timestamp est pour le moment compris entre 1970 - 2038 ce qui n'est pas le cas du datetime. Alors certes dans 5 ans on auras tous des serveur 64bit mais c'est juste dommage de parier sur un changement de technos pour assurer la pérénité d'une appli plutot que de s'appuyer sur quelque chose qui marche déjà maintenant et marchera demain (enfin jusqu'en 9999 ...).
D'accord avec vous! Je dirai quand même que ces 2 points restent une question d'appréciation. Encore 28 ans de pérennité pour le timestamp... pas sûr du tout que l'appli tienne jusque là ;-)
defcon_suny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 20h56   #9
 
Inscription : décembre 2010
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 6
Points : -1
Points : -1
Merci pour vos réponses !

En parlant de temps, dans ma tables 'horaires' (dans laquelle je stock les types d'horaires possibles) une colonne heure_debut et une colonne heure_fin, les deux de type TIME (MySQL).

Cependant, lors de l'affichage, il est affiché HH:MM:SS, or l'affichage des secondes est inutile, et je ne trouve pas le moyen de l'afficher en HH:MM, sauf en changeant mes type en INT et en insérant des TIMESTAMP UNIX via PHP, mais par souci de lisibilité, je souhaiterai concernant mon type TIME si possible.
Dime313 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2010, 08h53   #10
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Code :
SELECT DATE_FORMAT(heure_debut,"%H:%i") FROM matable
?
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2010, 19h58   #11
 
Inscription : décembre 2010
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 6
Points : -1
Points : -1
$selection2 = 'SELECT DATE_FORMAT(heure_debut,"%H:%i") FROM planning WHERE id_utilisateur = '.$data[id].' AND date = '.$date;

Ca me retourne rien, à part si je mélange tout avec les ' et "
Dime313 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/12/2010, 12h08   #12
 
Inscription : décembre 2010
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 6
Points : -1
Points : -1
Joyeu Noël à tous !

$selection2 = 'SELECT DATE_FORMAT(heure_debut,"%H:%i") FROM planning WHERE id_utilisateur = '.$data[id].' AND date = \''.$date.'\'';

ne me renvoi rien, alors que :

$selection2 = 'SELECT heure_debut FROM planning WHERE id_utilisateur = '.$data[id].' AND date = \''.$date.'\'';

Me renvoi bien la l'heure mais sous la forme HH:MM:SS
Dime313 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/12/2010, 12h25   #13
 
Inscription : décembre 2010
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 6
Points : -1
Points : -1
Bon, ben finalement j'ai trouvé la réponse ! (un vrai monologue lol)

$selection2 = 'SELECT DATE_FORMAT(heure_debut,\'%H:%i\') AS heure_debut FROM planning WHERE id_utilisateur = '.$data[id].' AND date = \''.$date.'\'';

il manquait un -> AS heure_debut
Dime313 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h14.


 
 
 
 
Partenaires

Hébergement Web