2012-04-10 8 views
1

holla Jungsphp, wie man dynamische Teilnahme basiertes System

ich bin inmitten einer PHP-Web-Anwendungen zu schaffen, wo es Admin kreuzen können, die beachteten Klasse.

ich habe folgende Daten auf Datenbank

Semesterbeginn, Semester Enddatum, Klasse Tag und Uhrzeit

zum Beispiel

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

kann ich total Wochen erhalten Basiertes Start- und Enddatum. Jetzt liegt das Problem darin, wie ich das Datum, das die Klassen annehmen, bekommen soll, wie am Montag, es soll neun sein, aber am Donnerstag? dynamisch.

Gibt es irgendwelche PHP-Klassen oder einen Ansatz?

Thanks a lot

+0

Warum speichern Sie die Daten in diesem Format: 'Montag {9,12}, Donnerstag {14,17}' ??? – Matthematics

+0

Fragen Sie nur, wie man die 14 und 17 aus der Zeichenfolge 'Montag {9,12}, Donnerstag {14,17}' dynamisch extrahiert? Wenn ja, verwenden Sie einen regulären Ausdruck. – Matthematics

Antwort

3

NICHT selbst Datumsfunktionen implementieren Sie, es gibt eine Menge von Gefahren beim Umgang mit Terminen. Sie können strtotime verwenden, um durch die Daten mit Strings wie: strtotime("next Thursday", yourdate)

+0

Vielen Dank, ich versuche es zuerst und konvertiere zuerst das Datum in unix_timestamp. – cicakman

1

Unsicher, ob es zu diesem Zeitpunkt das Format Ihrer Daten ändern, aber die Art, wie ich würde empfehlen, Ihre Datenbank zu strukturieren (was würde erheblich vereinfachen Abfrage der Art der Informationen, die Sie zu fragen) würde wie folgt sein:

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

Dann abfragen, wie viele Tage ein Schüler besucht, würden Sie tun:

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

natürlich ohne mehr darüber, was zu wissen, exa Sicherlich, du versuchst es zu erreichen, ich kann mir nicht sicher sein, dass das völlig angemessen ist. Obwohl das Format, in dem Sie Ihre Daten speichern, so aussieht, als würde es Ihr Leben unnötig erschweren (Sie kombinieren verschiedene Datenpunkte zu einer einzigen Spalte; das ist ein Nein), also könnte ich mir vorstellen, dass dies eine Verbesserung ist.

EDIT: Um genauer zu sein, speichern Sie das Datum und die Periode (anstelle von Datum und Uhrzeit); Beispiel:

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

Ähm, macht Sinn, aber das Problem ist, dass sie einige Klassen an verschiedenen Tagen und zu verschiedenen Zeiten hinzufügen können, zu dieser Zeit dachte ich, das wäre der beste Weg zu gehen, aber anscheinend nicht so jetzt! – cicakman

+0

Es könnte tatsächlich einfacher sein, ein Skript zu schreiben, das Ihre Daten neu formatiert, und dann die neu formatierten Daten abzufragen. ;) – Matthematics