2012-04-10 9 views
1

叫び声みんなPHPどのように動的に出席ベースのシステム

は、私はそれがクラスに出席した人ティックには、adminができますPHPのWebアプリケーションを作成するの真っ只中です。

私は、合計週を得ることができます例えばデータベース

学期の開始日、学期の終了日、クラスの日と時間

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

上のデータを以下しています開始日と終了日を指定します。今問題は、月曜日のように、クラスがどのようになると思われる日を取得するのですか?それは9日であると思われますが、木曜日ですか?動的に

PHPクラスがありますか、それともアプローチはありますか?

+0

なぜデータを「月曜日{9,12}、木曜日{14,17}」の形式で保存していますか? – Matthematics

+0

文字列 'Monday {9,12}、Thursday {14,17}'から動的に14と17を抽出する方法を聞いていますか?その場合は、正規表現を使用します。 – Matthematics

答えて

3

たくさん

おかげで日付関数を自分で実装していない、日付を扱う落とし穴がたくさんあります。 strtotimeを使用すると、次のような文字列を使用して日付を繰り返し処理できます。strtotime("next Thursday", yourdate)

+0

ありがとう、まずこれを試してみて、最初に日付をunix_timestampに変換してください。 – cicakman

1

この時点でデータの書式を変更するのは確かではありませんが、データベースを構造化することをお勧めします。あなたはについての質問情報の種類)このようになります:

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

その後、生徒は出席日数照会し、あなたはどうなる:もちろん

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

を、どのようなEXAについての詳細を知らなくても、 ctlyあなたが達成しようとしている、私はこれが完全に適切であることを確認することはできません。あなたのデータを格納するために使用しているフォーマットは、あなたの人生を不必要に困難にしているように見えますが(異なるデータポイントを1つのカラムに結合する、それはno-noです)、これは改善だと思います。

編集:より正確には、(日付と時刻ではなく)日付と期間を保存します。例:

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は意味がありますが、別の曜日と時間にいくつかのクラスを追加できるという問題があります。この特定の時間に、これは最善の方法だと思っていましたが、今はそうではありません。 – cicakman

+0

実際にデータを再フォーマットするスクリプトを作成し、その再フォーマットされたデータを照会する方が簡単かもしれません。 ;) – Matthematics