อยากถามเกี่ยวกับตารางการจองของสนามครับ มีแหล่งอ้างอิง
อ้างอิงจากกระทู้นี้ครับ
https://www.thaicreate.com/php/forum/094496.html
ผมได้แก้ไขในส่วนต่างแล้วแต่ว่าของผมมีเงื่อนไขเพื่มมาอย่างนึงคือ
1. ของด้านบนมีเป็นการเปรียบเทียบสองตาราง
2. ในส่วนของผมต้องการจะดึงเงื่อนไขในส่วนของคนจองแล้วมาแสดงแทนครับว่ามีใครจองเวลาไหนแล้ว ที่สนามไหน
ผมได้แก้ไขโค๊ดในกระทู้ข้างต้นเป็นดังนี้ครับ
Code (PHP)
include "system/connect.php";
$query = mysql_query("SELECT * FROM time");
while($rs = mysql_fetch_assoc($query))
{
$timeArr[$rs['id_time']] = array( "start" => $rs['time_start'], "stop" => $rs['time_stop']);
}
//DATABASE to Array
//วนลูปฐานข้อมูล มาเก็บในรูปแบบ Array
$query1 = mysql_query("SELECT * FROM stadium");
while($rs1 = mysql_fetch_assoc($query1)){
$timeTeach[$rs1['id_stadium']][] = array( "time" => '10:00-11:00', "title" => $rs1['name_stadium']);
}
//End การจัดรูปแบบข้อมูล
/* Head Column */
function createCol($arr){
$row = "";
foreach( $arr as $data )
{
$row .= '<td>' . $data['start'] . '-' . $data['stop'] . '</td>';
}
return $row;
}
/* Key Positon */
function getCol($haystack, $keyNeedle)
{
$i = 0;
foreach($haystack as $arr)
{
if($arr['start'] == $keyNeedle)
{
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 = getCol($timeCol, $tm[1] );
$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">';
echo '<tr><td> </td>'. createCol( $timeArr ) .'</tr>';
foreach($timeTeach as $i=>$arr){
//ค้นหาข้อมูลในตารางลงทะเบียน
//นับช่วงเวลา start_time กับ stop_time ว่ามีกี่ช่อง
$timeT = $timeTeach[$i];
$arrRange = getTimeRange($timeT, $timeArr);
//echo '<pre>', print_r($arrRange,true) ,'</pre>';
$no = $i;
$list = '<tr>';
$list.= '<td rowspan="2" class="no">สนาม'.$no.'</td>';
$chkCol = 0;
$col = 0;
foreach( $timeArr as $timeA )
{
$highlight = "";
$colspan = "";
if($chkCol < ($col-1) && $col != 0){
$chkCol++;
continue;
}
$col = 0;
$chkCol = 0;
if(!empty($arrRange[trim($timeA['start'])])){
$col = $arrRange[trim($timeA['start'])]['colspan'];
$highlight = "highlight";
$colspan = 'colspan="'.$col.'"';
}
}
$list.= '</tr>';
$list.= '<tr>';
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>';
?>
ก็จะได้ตามภาพเป็นแบบนี้
ส่วนฐานข้อมูลขอผมตอนนี้ที่ดึงมาแล้ว 2 ตารางคือเวลากับสนามครับ
ที่นี้เงื่อนไขที่เพิ่มของผมเป็นตารางการเช่าครับ
จะสร้างเงื่อนไขเพิ่มยังไงดีครับให้แสดงไฮไลท์เฉพาะในส่วนของช่วงที่มีคนเช่าแล้ว
ปล. โค๊ดที่ผมแก้ไข ผมลองเพิ่มเติมเองนะครับมันเลยออกมาเป็นแบบภาพแรกที่เห็น Tag : PHP, MySQL, HTML/CSS
ประวัติการแก้ไข 2014-10-03 18:16:08
Date :
2014-10-03 18:14:44
By :
teamerze
View :
1134
Reply :
8
ช่วยหน่อยครับ
Date :
2014-10-03 20:38:18
By :
teamerze
ใช้งานจริงหรือเปล่าครับ หรือโปรเจคถ้าใช้งานจริงแนะนำ MRBS เลย สะดวก คอนฟิกนิดๆหน่อยใช้งานได้แล้ว
ถ้าเป็นโปรเจคก็ ผมว่ายุบตาราง time ใส่ใว้ในตาราง rent เลยครับ แล้วดึง rent ใส่เงื่อไข rent_date เข้าไป ณ ช่วงเวลาที่ต้องการ
เช่น select count(id) as num from rent where rent_date=date() and rent_time= อะไรก็ว่าไป
ถ้าเกิดมันมีค่าก็ให้มันเปลี่ยนสีพื้นหลัง ครับ ประมาณนี้
Date :
2014-10-04 10:50:32
By :
tam78910
อ่อ เป็นโปรเจ็คครับ เด๊่ยวจะลองหาวิธีดูครับ
Date :
2014-10-04 11:11:39
By :
teamerze
เออ ผมว่า จริงๆ แล้ว code มันน่า จะ ง่าย กว่านี้ นะ
ก่อนอื่นต้อง ทำ base ให้ถูกก่อน นะ table rent
1 เก็บ เวลา array $time[$id_time] = array( "time" => $rs['time_start'].'-'.$rs['time_stop']);
2 เก็บ สนาม array $std[$id_std] = array(detail);
3 เก็บ คนจอง array $rent[$id_std][$id_time] = array(detail);
(ตอนเก็น rent ต้อง export() id_time ออกมาอีกทีนะเพราะ base มันเก็บ 1,2 ใช่ป่าว)
$rent_time = export(',',$result['id_time'])
เช่น
Code (PHP)
foreach( $rent_time as $rent_time2 ){
$rent[$id_std][$rent_time2 ] = array('mem' => '22');
}
พอได้ 3 อันนี้ ละ
ก็
Code (PHP)
foreach($std as $std_=>$std_2){
echo '<td>'.$std_2['name'].'</td>';
foreach($time as $time_=>$time_2){
if(empty($rent[$std_][$time_]['mem']))
echo '<td></td>'
else
echo '<td>'.$rent[$std_][$time_]['mem'].'</td>'
}
}
ผมว่าน่าจะได้แล้ว นะ ส่วนอยากให้หน้าตาออกมายังไง ต้องเอาไปปรับเองละครับ
ประวัติการแก้ไข 2014-10-04 12:13:11
Date :
2014-10-04 12:10:21
By :
gaowteen
ใกล้ละครับ แต่มีข้อมูลการเช่ามาแต่มันดันขึ้น ... (แสดงว่าไม่มี ใช่ไหมครับ)
Code (PHP)
<table>
<?
include "system/connect.php";
echo "<tr>";
$query2 = mysql_query("SELECT * FROM time ORDER BY `time`.`time_start` ASC ");
while($rs2 = mysql_fetch_assoc($query2)){
$time[$rs2['id_time']] = array( "start" => $rs2['time_start'], "stop" => $rs2['time_stop']);
}
$room = array();
$query = mysql_query("SELECT *
FROM stadium ");
while($rs = mysql_fetch_assoc($query)){
$std[] = array( "id" => $rs['id_stadium'] , "name" => $rs['name_stadium']);
}
$booking = array();
$query1 = mysql_query("SELECT * FROM rent");
while($rs1 = mysql_fetch_assoc($query1)){
$booking[$rs1['id_stadium']][$rs1['time_start']] = array('start_time' => $rs1['time_start'] , 'end_time' => $rs1['time_stop'] , 'title' => $rs1['id_member'] );
}
foreach($std as $std_=>$std_2){
echo '<td>'.$std_2['name'].'</td>';
foreach($time as $time_=>$time_2){
if(empty($booking[$std_]['start_time']['mem']))
echo '<td>..</td>';
else
echo '<td>'.$booking[$std_][$time_]['time_start'].'</td>';
}
}
?>
</table>
ผมแก้ไขตารางการเช่าแล้วให้เก็บค่า เริ่มต้นกับสิ้นสุดแทนเก็บ Id_time ละนะครับ
ประวัติการแก้ไข 2014-10-04 14:52:32
Date :
2014-10-04 14:51:27
By :
teamerze
ไม่ใช่ครับ เก็บ เหมือนเดิม ถุกแล้ว แค่แก้ id_time ให้ตรงกับ table time
ประมาน นี้
Code (PHP)
<table>
<?
include "system/connect.php";
echo "<tr>";
$query2 = mysql_query("SELECT * FROM time ORDER BY `time`.`time_start` ASC ");
while($rs2 = mysql_fetch_assoc($query2)){
$time[$rs2['id_time']] = array( "time" => $rs2['time_start'].'-'.$rs2['time_stop']);
}
$room = array();
$query = mysql_query("SELECT *
FROM stadium ");
while($rs = mysql_fetch_assoc($query)){
$std[$rs['id_stadium']] = array( "id" => $rs['id_stadium'] , "name" => $rs['name_stadium']);
}
$booking = array();
$query1 = mysql_query("SELECT * FROM rent");
while($rs1 = mysql_fetch_assoc($query1)){
$rent_time = explode(',',$rs1['id_time']);
foreach($rent_time as $rent_timeVal ){
$booking[$rs1['id_stadium']][$rent_timeVal] = array('start_time' => $rs1['time_start'] , 'end_time' => $rs1['time_stop'] , 'title' => $rs1['id_member'] );
}
}
foreach($std as $std_=>$std_2){
echo '<td>'.$std_2['name'].'</td>';
foreach($time as $time_=>$time_2){
if(empty($booking[$std_][$time_]['title']))
echo '<td>..</td>';
else
echo '<td>'.$booking[$std_][$time_]['time_start'].'</td>';
}
}
?>
</table>
ประวัติการแก้ไข 2014-10-04 16:06:23
Date :
2014-10-04 15:47:54
By :
gaowteen
อ่อ โอเคครับ ตอนนี้เหมือนเห็นรูปร่างละเด๊่ยวจะลอง ตกแต่งดูครับ ได้ไม่ได้ผมจะมาลองถามอีกทีนะครับ
Date :
2014-10-04 17:36:46
By :
teamerze
ได้ละครับ ขอบคุณมากครับที่ช่วยแนะนำ
Code (PHP)
$stadium = array();
$query = mysql_query("SELECT * FROM stadium ");
while($rs = mysql_fetch_assoc($query)){
$std[$rs['id_stadium']] = array( "id" => $rs['id_stadium'] , "name" => $rs['name_stadium']);
}
$query2 = mysql_query("SELECT * FROM time ORDER BY `time`.`time_start` ASC ");
while($rs2 = mysql_fetch_assoc($query2)){
$time[$rs2['id_time']] = array( "time" => $rs2['time_start'].'-'.$rs2['time_stop']);
}
$booking = array();
$query1 = mysql_query("SELECT * FROM rent");
while($rs1 = mysql_fetch_assoc($query1)){
$rent_time = explode(',',$rs1['id_time']);
foreach($rent_time as $rent_timeVal ){
$booking[$rs1['id_stadium']][$rent_timeVal] = array('id' => $rs1['id_member'] ,'title' => $rs1['id_member'] );
}
}
echo '<table border="1">';
foreach($std as $std_=>$std_2){
echo '';
echo '<tr><td></td><td align="center"><b>'.$std_2['name'].'</b></td><td align="center"><b> ชื่อผู้จอง</b></td>';
foreach($time as $time_=>$time_2){
echo '<tr>';
echo '<td align="center"><b>เวลา</b></td><td align="center">'.$time_2['time'].'</td>';
if(empty($booking[$std_][$time_]['title']))
echo '<td align="center"><p style="color:green"><b> ว่าง </b></p></td>';
else
echo '<td align="center"><p style="color:red"><b>'.$booking[$std_][$time_]['id'].'</b></p></td>';
}
echo '</tr>';
}
Date :
2014-10-04 19:18:39
By :
teamerze
Load balance : Server 02