我會這樣設計啦,供參考:
1.一張資料表存課堂資料。
資料表應該會長像這樣(用逗點分隔比較好解析):
課程名稱 1 2 3 4 5 6 0 課程代號
XX課 5,6,7 3,4 00123
OO課 1,2,3 3,4 00456
2.一張資料表存學生選課資料。
學生姓名 課程代號
AAA 00123
AAA 00456
3.後端收到request後,運算出期間內學生修課,產出JSON供前端解析。
我應該會先產生該名學生週內課程的HASH表,然後產出。
JSON應該長的會像這樣:
[
{date:"2018/1/1", weekday:"1", lesson:["","","","","XX課","XX課","XX課",""]},
{date:"2018/1/2", weekday:"2", lesson:["OO課","OO課","OO課","","","","",""]},
...
]
4.前端解析。
所以最困難的應該是3的部份,如果還要加上調課的邏輯,就還需要一張表來處理。
做的出來就是對的,要不然就請你發表一下你的高見。
我是降設計大概類似第一點
echo '</tr>';
for ($x=1;$x<=9;$x++){
echo '<tr>';
for ($i=0;$i<=6;$i++)
if($i!=0){
echo '<td>';
$sql2="select * from EC6023 where weekday=:Weekday";
$sqlr =$connr->prepare($sql2);
$ar_val1=array('Weekday'=>changeDay($i));
if($sqlr->execute($ar_val1)){
while ($course=$sqlr->fetch())
{
$s=(string)$x;
if(strpos($course['ctime'],$s)!==false)
echo $course['classname'].'<br>'.$course['teacher'];
else
echo "";
}
}
'</td>';
}
else{
echo '<td>'. classnum($x).'</td>
}
}
echo '</tr>';
}
沒什麼高見,只是基本的3NF正規化和考慮資料新增、刪除、修改,會這樣設計就表示沒有理解資料庫設計的意涵而已,花個幾小時去了解一下,就會知道在說什麼了~
課表不是應該要綁日期嗎?
因為多周顯示問題 + 課程可以調班
還是設計只顯示當周課表?
這兩種的資料庫設計方式不一樣喔
只是設計周課表,我剛把ctime改成567節數跟$x為6用字串比對,但不知道為什麼比對不出來..
$d=$course['ctime']; //假設$d=567
if(strpos($d,$x)!==false) //$x=6
echo $course['classname'].'<br>'.$course['teacher'];
else
echo "hihi";
for ($x=1;$x<=9;$x++){
echo '<tr>';
for ($i=0;$i<=6;$i++)
if($i!=0){
echo '<td align="center">';
$sql2="select * from EC6018 where weekday=:Weekday";
$sqlr =$connr->prepare($sql2); $ar_val1=array('Weekday'=>$i);//sql叫出資料語法
if($sqlr->execute($ar_val1)){
while ($course=$sqlr->fetch()){ $d=$course['ctime'];
if(strpos($d,$x)!==false)
echo $course['classname'].'<br>'.$course['teacher'];
else
echo "hihi";
}
}
'</td>';
}
}
已修正~謝謝
這其實是要看你的規劃來決定你要的東西。
1.如果是屬於資料單一節計算的方式。
那就維持你目前的資料表架構。只是資料要用三筆來呈現567節。
2.但如果是範圍式的做法。那你的程式就得要改變一下。並將ctime改成範圍性的值。如5-7
3.另一種做法,則是將課程跟時間分開不同表處理。配合第一種做法也行。
但還是要可以先明白清楚你的規劃是如何的才行。