J'aimerais savoir comment vous feriez pour organisé une table d'horaires.
Je m'explique :
Imaginons qu'une personne à un magasin, ce magasins dispose d'un horaire comme suis :
Tout est exprimé en heure 23 = 23h ou 11h du soir !
Ceci est bien évidemment un exemple ! (les pause ne sont pas a prendre en compte !)
J'aimerais donc savoir comment vous organiseriez ceci dans un table.
Pour ma part, j'aurais fait comme ça :
// Table magasin :
id | nom_magasin | ...
// Table jours
id | id_magasin | d1 | d2 | ... | d7*
// Table heure (je sais pas trop justement !)
* d7 = dimanche et d1 = lundi
Donc cette structure actuelle permet d'insérer pour un magasin ses jours d'ouverture (je met d1 d2 d3 etc... en ENUM avec 0 ou 1 (faux ou vrai) pour savoir si ouvert ou pas)
Mais j'aimerais aussi stocké les heures d'ouvertures (qui pourraient changer en fonction des magasins)
Évidemment je pourrais le faire de manière textuel ... (table heure relié à table jour : 12,13,14,15,20,22 puis je fait un explode)
Ce que je voudrait c'est pouvoir faire une recherche dans les tables, actuellement je peux recherche un magasin en fonction de son jour d'ouverture (ex : je cherche un magasin ouvert le lundi)
Mais je voudrais faire pareil pour l'horaire donc recherche un magasin ouvert avant 10h ou après 20h (nigth shop) par exemple !
Avec les contraintes que tu énonces, je ferais simplement deux tables : magasin(m_id, nom, adresse, ..) et trancheHoraire(th_id, m_id, jour, debut, fin).
Pas bête du tout, cependant on pourrait imaginer qu'il y ait une tranche 10, 11, 12 (10 - 12) puis 13 (ouvert juste 1heure) puis ouvert 17, 18, 19 puis 22 ...
J'ai un script php qui récupère par jour toutes les heures dans un tableau :
Eh bien tu insères autant de lignes que de tranches horaires d'ouvertures : (:idMag, :jour, 10, 12), (:idMag, :jour, 13, 13) (:idMag, :jour, 17, 19) et (:idMag, :jour, 22, ...).
Il y a sans doute plusieurs façons de faire. La première idée qui me vient c'est de remettre tes données à plat dans un tableaux 2d :jour => array(heure1, heure2, heure3), ce qui se fait très facilement avec une boucle et un array_merge(). Une fois ce tableau sous la main, deux boucles imbriquées de 1 à 7 pour les jours et de 0 à 23 pour les heures pour générer les checkbox sans oublier de vérifier si data[:jour] n'est pas vide pour cocher la checkbox du jour et vérifier avec array_search() si :heure existe dans data[:jour] pour cocher les checkbox des heures.
Donc quand je reçois mes champs pour l'horaire (la sortie est celle de l'image dans le post + haut) j'ai quelque chose comme ça avec le print_r() :
[jour] => Array
(
[1] => on
[2] => on
[5] => on
[7] => on
)
[heure1] => Array
(
[8] => on
[9] => on
[10] => on
[11] => on
[12] => on
[13] => on
[18] => on
[19] => on
[22] => on
[23] => on
)
[heure2] => Array
(
[6] => on
[8] => on
[13] => on
[15] => on
)
[heure5] => Array
(
[10] => on
[11] => on
[12] => on
[13] => on
[14] => on
[17] => on
)
[heure7] => Array
(
[9] => on
[10] => on
[11] => on
[12] => on
[13] => on
[14] => on
[15] => on
[16] => on
)
Je sais que à ce stade, c'est plus de la logique Php mais je préfère ne pas créer un nouveau post !
Bin il te suffit de regrouper pour chaque jour les clés qui se suivent en couple (début, fin) pour obtenir toutes les tranches, ensuite il est très facile de construire le VALUES de la requête d'insertion.
Ca avait l'air fun alors je l'ai fait, mais c'est mieux si tu le fais par toi-même d'abord, donc je mets en secret.
En général, colXX n'est pas une bonne idée. Il est vrai que dans le cas présent, il est peu probable qu'une 25ème heure vienne s'ajouter, mais cette structure compliquerait quand même tes requêtes. Quelle requête utiliserais-tu pour trouver par exemple tous les magasins ouverts entre 9 et 13h ? Ou tous les magasins ouvert avant telle heure ? Tu n'aurais vraisemblablement pas d'autres choix que de tester la valeur d'un nombre non négligeable de colonnes et de faire des AND ou des OR à tout va.
Avec la structure que j'ai proposé, ça serait bien plus simple, il suffirait d'un WHERE sur le début ou la fin pour trouver les tranches horaires adéquates et une simple jointure pour avoir les infos sur les magasins dont on a trouvé les tranches horaires.
Pas stocker des intervalles te mettra dans la galère dès que tu auras des besoins de calcul et franchement, pour être très honnête, ton problème ne parle que d'intervalles, toutes modélisation différente aura des inconvenients pénibles (imagine, par exemple, déjà qu'on te demande finalement une borne à 17h30...)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Mes projets : WhoisRedJohn, fatidique et MusicAll. Mon Github
Mes projets : WhoisRedJohn, fatidique et MusicAll. Mon Github
Mes projets : WhoisRedJohn, fatidique et MusicAll. Mon Github
Mes projets : WhoisRedJohn, fatidique et MusicAll. Mon Github
Mes projets : WhoisRedJohn, fatidique et MusicAll. Mon Github
Mes projets : WhoisRedJohn, fatidique et MusicAll. Mon Github
Mes projets : WhoisRedJohn, fatidique et MusicAll. Mon Github