2012-04-10 2 views
1

guys hollaphp comment système basé sur la présence dynamique

je suis au milieu de la création d'un applications web php où il permet d'administration de cocher qui ont assisté à la classe.

j'ai données suivantes sur la base de données

semestre date de début, date de fin de semestre, jour de classe et le temps

par exemple,

5 March 2012, 9th April 2012Monday{9,12},Thursday{14,17}

Je peux obtenir le total des semaines date de début et de fin Maintenant, le problème réside dans la façon dont j'obtiens la date que les classes supposent être, comme le lundi, supposé être le 9, mais le jeudi? dynamiquement.

Existe-t-il des classes php ou une approche?

Merci beaucoup

+0

Pourquoi stockez-vous les données dans ce format: 'Monday {9,12}, Thursday {14,17}' ??? – Matthematics

+0

Demandez-vous simplement comment extraire dynamiquement les 14 et 17 de la chaîne 'Monday {9,12}, jeudi {14,17}'? Si c'est le cas, utilisez une expression régulière. – Matthematics

Répondre

3

Ne pas mettre en œuvre vous-même les fonctions de date, il y a beaucoup de pièges lors de la manipulation des dates. Vous pouvez utiliser strtotime pour parcourir les dates en utilisant des chaînes comme: strtotime("next Thursday", yourdate)

+0

merci beaucoup, mal essayer avec ceci d'abord et convertir la date en unix_timestamp d'abord. – cicakman

1

Pas sûr si elle est susceptible de changer le format de vos données à ce stade, mais la façon dont je recommande la structuration de votre base de données (qui simplifierait considérablement l'interrogation de la le type d'information que vous poser des questions sur) serait comme ceci:

CREATE TABLE `student_attendance` (
    `student` INT(11) NOT NULL, 
    `class` DATETIME NOT NULL, 
    `attended` BOOLEAN NOT NULL, 
    PRIMARY KEY (`student`,`class`) 
) 

Puis, pour demander combien de jours un étudiant a assisté, vous feriez:

SELECT COUNT(*) 
FROM `student_attendance` 
WHERE `student` = '1' 
AND `attended` = TRUE; 

Bien sûr, sans en savoir plus sur ce exa Je ne peux pas être sûr que ce soit tout à fait approprié. Bien que le format que vous utilisez pour stocker vos données semble vous rendre la vie inutilement difficile (vous combinez différents points de données dans une seule colonne, c'est un non-non), donc j'imagine que c'est une amélioration.

EDIT: Pour être plus précis, enregistrez la date et la période (au lieu de la date et l'heure); par exemple:

CREATE TABLE `student_attendance` (
    `student` INT(11) NOT NULL, 
    `class_date` DATE NOT NULL, 
    `class_period` TINYINT(4) NOT NULL, 
    `attended` BOOLEAN NOT NULL, 
    PRIMARY KEY (`student`,`class_date`,`class_period`) 
) 
+0

erm, a du sens mais le problème est qu'ils peuvent ajouter quelques classes sur différents jours et temps, à ce moment précis je pensais que ce serait la meilleure façon de faire, mais apparemment pas maintenant! – cicakman

+0

Il peut être plus facile d'écrire un script qui reformate vos données, puis d'interroger ces données reformatées. ;) – Matthematics

Questions connexes