Discussion:
Mauvaise conception a la base
(trop ancien pour répondre)
Stephane
2009-07-08 21:23:20 UTC
Permalink
Bonjour à tous,

J'ai créer une petit application pour enregistrer des gens dans des tranches horaires. J'apprends
maintenant que le nombre de personne présente à chaque tranche n'est pas le même. C'est la que je
coince.

J'ai créer une tableau avec les différentes tranches:

$tranche_array=array(0 =>
'09h - 12h',
'12h - 15h',
'15h - 18h',
'18h - 21h',
'21h - 24h',
'24h - 03h'
);

Puis les tranches sont associées à 3 dates différente, exemple:

25-09-2009 15h-18h
25-09-2009 18h-21h
etc....
26-09-2009 09h-12h
26-09-2009 12h-15h
etc.. avec le 3eme jour.

J'enregistre ces données dans une bd mysql, jusque là tout va bien.

Maintenant, comme faire pour associer un nom de personne par tranche? Exemple:

25-09-2009 15h-18h 5
25-09-2009 18h-21h 5
etc....
26-09-2009 09h-12h 3
26-09-2009 12h-15h 3
26-09-2009 15h-18h 4
etc...

Est-qu'il serait préférable de modifier mon tableau $tranche ou d'en créer un nouveau ou plutôt de
gérer cette affaire dans la BD.

Je sèche un peu sur ce coup là.

D'avance merci pour vos précieux conseils.

Stéphane
Christophe Bachmann
2009-07-08 22:43:14 UTC
Permalink
Post by Stephane
Bonjour à tous,
J'ai créer une petit application pour enregistrer des gens dans des
tranches horaires. J'apprends maintenant que le nombre de personne
présente à chaque tranche n'est pas le même. C'est la que je coince.
Ton truc est super complexe alors qu'il te suffit de créer un tableau à
deux dimensions.
Crée un tableau de dates qui contient un tableau de tranches qui
contient des entiers...

Ou si tu préfères, même si c'est moins logique un tableau de tranches
qui contient un tableau de dates qui contient des entiers.

<?php
$Dates = array("25-09-2009" => array("09h - 12h" => 5, "12h - 15h" => 3,
etc), array(26-09-2009" => array("09h - 12h" => 8, ect), ect);

echo $Dates["25-09-2009"]["12h - 15h"]; // 3
echo $Dates["26-09-2009"]["09h - 12h"]; // 8
?>
Evidemment remplacer les etc par les itérations nécessaires.

et fonction de tes besoins, tu peux même te simplifier la vie en ne
mettant que le début de la tranche genre "09h" puisque tes tranches font
trois heures de long, voir même utiliser un entier 0..5 ce qui te permet
de faire de l'arithmétique sur tes tranches, et d'utiliser un tableau
auxiliaire (ou une fonction de construction) pour les libellés.

De même pour tes dates n'hésite pas (si tu en as plus de trois) à
utiliser un entier comme index et un tableau (ou une fonction de
construction) des libellées pour te faciliter la vie.

En grand paresseux je créerais ce genre de tableaux avec deux boucles
imbriquées pour m'assurer de tout dimensionner à 0 et après il ne te
resterait plus qu'à affecter les valeurs aux éléments.

Ceci dit ta question n'est pas très claire donc peut être que ma réponse
est complètement à côté... Surtout que je ne vois pas trop le rapport
entre le tableau et la BD.
--
Greetings, Salutations,
Guiraud Belissen, Château du Ciel, Drachenwald,
Chris CII, Rennes, France
Sylvain SF
2009-07-08 22:43:14 UTC
Permalink
Post by Stephane
J'ai créer une petit application pour enregistrer des gens dans des
tranches horaires. J'apprends maintenant que le nombre de personne
présente à chaque tranche n'est pas le même. C'est la que je coince.
on pouvait se douter que l'évènement "quelqu'un fait quelque chose"
pouvait se produire, même pour de tranches horaires de même durée,
avec un taux de fréquence différent, donc pas de surprises.
Post by Stephane
$tranche_array=array(0 =>
'09h - 12h', '12h - 15h', '15h - 18h',
'18h - 21h', '21h - 24h', '24h - 03h'
);
25-09-2009 15h-18h | 25-09-2009 18h-21h
etc....
26-09-2009 09h-12h | 26-09-2009 12h-15h
etc.. avec le 3eme jour.
J'enregistre ces données dans une bd mysql, jusque là tout va bien.
tu ne dis nullement comment, cela va donc plus dans le flou que bien.

imaginons, la table
journee DATE,
tranche INT(1),
nbEvent INT(4), -- ????
-- ?????
Post by Stephane
Maintenant, comme faire pour associer un nom de personne par tranche?
?!?

"nbEvent++" c'est pas assez ?
Post by Stephane
Est-qu'il serait préférable de modifier mon tableau $tranche ou d'en
créer un nouveau ou plutôt de gérer cette affaire dans la BD.
la table pourrait - je pense - se moquer des tranches, qui ne sont
qu'une (ou principalement) commodité de traitement (d'affichage,
de sélection, ...).

la table pourrait donc simplement enregistrer des évènements
(comme "arrivé", "départ", etc) et les associer à un identifiant
de personne (ou nom, etc complet) avec la date de survenue, soit:

create table t_event (
eventId INT(2) not null, -- type of event
peopleId INT(4) not null, -- identifier of personn
eventDate DATE not null, -- date of event
eventTime TIME not null -- time of event
index i_event_date (eventDate),
index i_event_time (eventTime)
);

depuis PHP, l'exploitation des tranches (celles que tu as présenté
ou d'autres différentes) reviendra simplement à sélectionner les
lignes telles que 'eventDate' soit la date choisie et 'eventTime'
soit dans la tranche voulue, ie

$smt = "SELECT eventId, peopleId FROM t_event ".
"WHERE eventDate='$myDate' ".
"AND eventTime BETWEEN '$tranche1' AND '$tranche2'";

avec par exemple:
$myDate = '2009-07-08';
$tranche1 = '22:00:00';
$tranche2 = '23:59:59';

pour lister ce qui s'est passé aujourd'hui entre 22h et minuit.

Sylvain.
Bruno Desthuilliers
2009-07-09 12:28:57 UTC
Permalink
Post by Stephane
Bonjour à tous,
J'ai créer une petit application pour enregistrer des gens dans des
tranches horaires. J'apprends maintenant que le nombre de personne
présente à chaque tranche n'est pas le même. C'est la que je coince.
$tranche_array=array(0 =>
'09h - 12h',
'12h - 15h',
'15h - 18h',
'18h - 21h',
'21h - 24h',
'24h - 03h'
);
25-09-2009 15h-18h
25-09-2009 18h-21h
etc....
26-09-2009 09h-12h
26-09-2009 12h-15h
etc.. avec le 3eme jour.
J'enregistre ces données dans une bd mysql, jusque là tout va bien.
Et si tu donnais la structure de ta base ?

Ceci étant, si tu utilise une bd, je ne vois pas trop à quoi servent tes
tableaux...
Post by Stephane
Maintenant, comme faire pour associer un nom de personne par tranche?
Par tranche ou par couple date/tranche ?
Post by Stephane
Est-qu'il serait préférable de modifier mon tableau $tranche ou d'en
créer un nouveau ou plutôt de gérer cette affaire dans la BD.
Une base de donnée - particulièrement une base SQL - n'est pas
_seulement_ un moyen de persistence des données.
Post by Stephane
Je sèche un peu sur ce coup là.
Tu ne donnes pas non plus assez d'informations sur le contexte. Mais
bon, on peut imaginer un truc comme ça:

personne(_personne_id_, nom, prenom, ...)
plage(_plage_id_, heure_debut)
presence(_date_, _plage_id_, personne_id)


Attention, ce n'est probablement pas la meilleure soluce, mais comme je
disais, on n'en sait pas assez sur le problème à résoudre.
Xavier Nayrac
2009-07-09 12:28:57 UTC
Permalink
Post by Stephane
J'ai créer une petit application pour enregistrer des gens dans des
tranches horaires. J'apprends maintenant que le nombre de personne
présente à chaque tranche n'est pas le même. C'est la que je coince.
[...]
Post by Stephane
Est-qu'il serait préférable de modifier mon tableau $tranche ou d'en
créer un nouveau ou plutôt de gérer cette affaire dans la BD.
Tu donnes toi-même la réponse dans le titre de ton post : mauvaise
conception.
Tu donnes aussi l'impression d'écrire d'abord le programme puis d'en
déduire la base de données. En faisant ça tu vas droit dans le mur.
Mais c'est peut-être une fausse impression, je peux avoir mal compris.

Construis d'abord une BD solide, le php suivra naturellement.
--
Xavier Nayrac
http://personalbugtracker.free.fr
Continuer la lecture sur narkive:
Loading...