|
|
|
สอบถามเกี่ยวกับตารางสอนตารางการนัดหมาย จะแสดงช่วงเวลาแบบ 1 ชั่วโมง แต่ช่วงเวลาขึ้นมาจาก database หมดเลย |
|
|
|
|
|
|
|
อ้างอิงจากกระทู้นี้นะค่ะ
https://www.thaicreate.com/php/forum/110887.html
พอดีได้สร้างตารางสอนเหมือนกับกระทู้ข้างต้น แต่ไม่เก็บวันจันทร์-ศุกร์ คือจะเป็นตารางสำหรับ1 วัน สามารถสร้างขึ้นมาได้แล้ว
แต่ติดตรงที่ว่าต้องการให้เวลาแสดงออกมาเป็น 09.00-10.00 10.00-11.00.....19.00-20.00
ส่วนนี้คือโค้ดที่ใช้ค่ะ
Code (PHP)
<?php
require_once 'connect.php';
$selTbTime = "select * from time";
$qryTbTime = mysql_query($selTbTime)or die(mysql_error());
while($rstTbTime = mysql_fetch_assoc($qryTbTime))
{
$timeArr[$rstTbTime['id_time']] = array( "start" => $rstTbTime['start_time'], "stop" => $rstTbTime['end_time']);
}
$sqlTb = "SELECT * FROM treatment where date='$_POST[date]'";
$qryTb = mysql_query($sqlTb)or die(mysql_error());
while($rstTb = mysql_fetch_assoc($qryTb))
{
$timeTeach[$rstTb['date']][] = array( 'time' => $rstTb["start_time"]."-".$rstTb["end_time"], 'title' => $rstTb["HNid"]." ");
}
/* Head Column */
function createCol($arr){
$row = "";
foreach( $arr as $data )
{
$row .= '<td class="center" width="30%" bgcolor="#DDA0DD" >' . $data['start'] . '-' . $data['stop'] . '</td>';
}
return $row;
}
/* Key Positon */
function getCol($haystack, $keyNeedle)
{
$i = 0;
//echo '<pre>', print_r($haystack,true) ,'</pre>';
foreach($haystack as $arr)
{
if($arr['start'] == $keyNeedle)
{
//echo '<pre>', print_r($arr,true) ,'</pre>';
return $i;
}
$i++;
}
}
function getCol2($haystack, $keyNeedle)
{
$i = 1;
//echo '<pre>', print_r($haystack,true) ,'</pre>';
foreach($haystack as $arr)
{
if($arr['stop'] == $keyNeedle)
{
//echo '<pre>', print_r($arr,true) ,'</pre>';
return $i;
}
$i++;
}
}
/* Time Range */
function getTimeRange($timeT, $timeCol){
$data = array();
foreach($timeT as $timeA){
$time = $timeA['time'];
if(!$time) continue;
$tm = explode("-", $time);
//echo '<pre>', print_r($tm,true) ,'</pre>';
$start = getCol($timeCol, $tm[0]);
$end = getCol2($timeCol, $tm[1] );
//echo '<pre>', $start,' '.$tm[0].' '.$end.' '.$tm[1] ,'</pre>';
$colspan = $end - $start;
$data[$tm[0]] = array('colspan' => $colspan, 'title' => $timeA['title']);
}
return $data;
}
$list = "";
echo '<table border="1" width="90%" align="center" cellspacing="0" cellpadding="2" style="table-layout: fixed;">';
echo '<tr><th width="10%">เวลา</th>'. createCol( $timeArr ) .'</tr>';
foreach($timeTeach as $i=>$arr){
//ค้นหาข้อมูลในตารางลงทะเบียน
//นับช่วงเวลา start_time กับ stop_time ว่ามีกี่ช่อง
$timeT = $timeTeach[$i];
//echo '<p>'.print_r($timeT).'</p>';
$arrRange = getTimeRange($timeT, $timeArr);
//echo '<pre>', print_r($arrRange,true) ,'</pre>';
$list = '<tr >';
$list.= '<td class="no" height="50"></td>';
$chkCol = 0;
$col = 0;
foreach( $timeArr as $timeA )
{
$highlight = "";
$colspan = "";
if($chkCol < ($col-1) && $col != 0){
$chkCol++;
continue;
}
$title = " ";
$col = 0;
$chkCol = 0;
if(!empty($arrRange[trim($timeA['start'])])){
$col = $arrRange[trim($timeA['start'])]['colspan'];
$title = $arrRange[trim($timeA['start'])]['title'];
$highlight = "highlight";
$colspan = 'colspan="'.$col.'"';
}
$list .= '<td '.$colspan.' class="'. $highlight .' title" >' . $title . '</td>';
}
$list .= '</tr>';
echo $list;
}
echo '</table>';
?>
นี่คือ database time ค่ะ
ส่วนนี่คือวันเวลานัดหมายค่ะ
รบกวนช่วยดูให้หน่อยนะค่ะ ขอบคุณค่ะ
Tag : PHP
|
ประวัติการแก้ไข 2016-05-01 00:57:31
|
|
|
|
|
Date :
2016-05-01 00:33:01 |
By :
chaearng |
View :
1535 |
Reply :
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MySQL มัน Compare หาช่วงเวลาในระดับ ชม. ได้อยู่แล้วนะครับ แต่จะต้องแปลงให้เป็นแบบ Date Time ก่อนครับ
SQL MYSQL DATE_FORMAT
แปลงใหเ้ป็น Format เป็น YYYY-MM-DD H:i:s
|
|
|
|
|
Date :
2016-05-04 08:56:46 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จาก "แต่ติดตรงที่ว่าต้องการให้เวลาแสดงออกมาเป็น 09.00-10.00 10.00-11.00.....19.00-20.00" หมายถึง หัวตาราง หรือ เวลาข้างในในแต่ละคาบ อธิบายหน่อย
|
|
|
|
|
Date :
2016-05-04 10:10:25 |
By :
Kin-Kee |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ทดลองศึกษาแล้วประยุกต์เอาครับ (ยังไม่ได้ทดสอบ)
Code (PHP)
<?php
$sql="
select t.doctor_id, u.id_time, b.`date`
, if( b.doctor_id is null, "", t.st) st
, if( b.doctor_id is null, "", t.en) en
from(
select u.doctor_id, t.start_time st, t.end_time en
from `time`, (
select doctor_id, `date` from booking
where `date` > curdate() group by doctor_id,`date`
) as u
) as t left join `booking` b
on b.doctor_id = t.doctor_id and b.start_time>t.st and b.end_time<=t.en
";
$rs=$db->query($sql) or die ($sql . "<br>" . $db->error );
$old_doctor_date = ""; $tr = ""; $tds="";
while($ro = $rs->fetch_assoc()){
if($ro['doctor_id'].$ro['date']!=$old_doctor_date){
if( $tds>"" ) $tr.="<tr>".$tds."</tr>\n";
$tds="<td>$ro[doctor_id]</td><td>ro[date]</td>";
$old_doctor_date=$ro['doctor_id'].$ro['date'];
}
$tds .= '<td>'.$ro['st'].'-'.$ro['en'].'</td>';
}
$div.="<tr>".$tds."</tr>\n";
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Chaidhanan TEST</title>
</head>
<body>
<table>
<?php echo $div;?>
</table>
</body>
</html>
|
|
|
|
|
Date :
2016-05-04 11:15:21 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 00
|