สอบถามเรื่องการแสดงผลแนวนอนของ PHP Connect MySQL ครับ
สอบถามเรื่องการแสดงผลของ PHP MySQL ครับ
ขอบโทษจริงๆครับลองหาแล้ว อ่านแล้วแต่ไม่เข้าใจเพราะประสบการณ์น้อยครับ
ต้องการดึงข้อมูลจาก MySQL มาแสดงผลครับ แบบนี้ครับ
Task Name | Day
-----------------------------------------------------------------
| Mon | Tue | Wed | Thu | Fri | Sat | Sun |
-----------------------------------------------------------------
Check01 | OK | ER | OK | OK | OK | OK | OK |
Check02 | OK | OK | OK | OK | OK | OK | OK |
Check03 | OK | OK | OK | OK | OK | OK | OK |
-----
Check22 | OK | OK | OK | OK | OK | OK | OK |
ต้องการให้แสดงผลการตรวจวัน MON แสดงถึง Check01 - Check22 พอวันอังคารให้ไปขึ้น Column ใหม่ต่อไปครับ
ตอนนี้ Query ออกมาได้ แนวตั้งหมดครับแบบนี้
-----------------------------------------------------------------
| Mon | Tue | Wed | Thu | Fri | Sat | Sun |
-----------------------------------------------------------------
Check01 | OK |
Check02 | ER |
Check03 | OK |
-----
Check22 | OK |
Check01 | OK |
Check02 | OK |
Check03 | OK |
-----
Check22 | OK |
Check01 | OK |
Check02 | OK |
Check03 | OK |
-----
Check22 | OK |
Check01 | OK |
Check02 | OK |
Check03 | OK |
-----
Check22 | OK |
ผมต้องปรับแก้ยังไงครับ
Source Code
<?php
function checkvalue_replacestring($checkvalue){
if( $checkvalue == "Completed")
{
echo "<center><font size=3 color=black>";
echo substr_replace("Completed", "✔", $checkvalue);
echo "</font><center>";
}
else{
echo "<center><font color = red size=3>";
echo substr_replace("Error", "✖", $checkvalue);
echo "</font><center>";
}
}
$db = new PDO("mysql:host=localhost;dbname=test", 'root', 'admin');
$sql = "SELECT
dtdailycheckvalue.vmonth,
dtdailycheckvalue.vweekno,
dtdailycheckvalue.vday,
dtdailycheckvalue.vdate,
dtdailycheckvalue.vdatestart,
dtdailycheckvalue.vdateend,
dtdailycheckvalue.mcname,
dtdailycheckvalue.valuecheck,
dtdailycheckvalue.vsign,
mtdailycl_maincat.mcname
FROM
dtdailycheckvalue
INNER JOIN mtdailycl_maincat ON mtdailycl_maincat.mcid = dtdailycheckvalue.mcname
GROUP BY
dtdailycheckvalue.vday,
dtdailycheckvalue.mcname
ORDER BY
dtdailycheckvalue.vdate ASC,
dtdailycheckvalue.vmonth ASC,
dtdailycheckvalue.mcname ASC,
dtdailycheckvalue.vweekno ASC,
dtdailycheckvalue.vday ASC,
dtdailycheckvalue.vdate ASC" ;
$stmt = $db->prepare($sql);
//$stmt->bindParam(':id', $id);
$stmt->execute();
$res_return = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!-- Table +++++++++++++++++++ -->
<table>
<tr><font size=5><u>Check List</u></font></tr>
<tr>
<td><u>Descriptions</u></td>
<td>Mon</td>
<td>Tue</td>
<td>Wed</td>
<td>Thu</td>
<td>Fri</td>
<td>Sat</td>
<td>Sun</td>
</tr>
<?php
foreach($res_return as $row){
?>
<tr>
<td><?php echo $row['mcname'] ; ?></td>
<td><?php echo checkvalue_replacestring($row['valuecheck'] ); ?></td>
</tr>
<?php
}
?>
</table>
ขอบพระคุณมากครับTag : PHP, MySQL, Windows
Date :
2014-07-19 14:33:22
By :
itsmenow
View :
1903
Reply :
8
แล้วเราจะแน่ใจยังไงครับว่า record ไหนสำหรับวันอะไร ครับ
หรือว่า มันครบทุกวัน เรียงมาตามลำดับ ไปหลุดครับ
ถ้าเป็นแบบนั้น ก็แบบข้างล่างครับ แต่แสดงในส่วนของ table ครับ
Code (PHP)
<table>
<tr><font size=5><u>Check List</u></font></tr>
<tr>
<td><u>Descriptions</u></td>
<td>Mon</td>
<td>Tue</td>
<td>Wed</td>
<td>Thu</td>
<td>Fri</td>
<td>Sat</td>
<td>Sun</td>
</tr>
<?php
$buffer=array();
foreach($res_return as $row){
if(!isset($buffer[$row['mcname']])) $buffer[$row['mcname']]=array();
$buffer[$row['mcname']][]=$row['valuecheck'];
}
foreach($buffer as $key=>$bf){
?>
<tr><td><?php echo $key; ?></td><?php foreach($bf as $k => $vl) echo '<td>'.$vl.'</td>'; ?></tr>
<?php
}
?>
</table>
Date :
2014-07-19 16:15:49
By :
Chaidhanan
ได้ละครับขอบคุณพี่ Chaidhanan มากครับ
ในแต่ละ record ของ valuecheck ผมเก็บวัน เดือน สัปดาห์ไว้ครับ ค่อนข้างมั่นใจว่าไม่มีหลุดแน่นอนครับ
จะรบกวนขอคำอธิบาย code ที่เขียนเพิ่มให้หน่อย ได้ไหมครับ ได้เป็นความรู้เพราะดูแล้ว งง ครับ
Date :
2014-07-19 16:31:03
By :
itsmenow
Code (PHP)
<table>
<tr><font size=5><u>Check List</u></font></tr>
<tr>
<td><u>Descriptions</u></td>
<td>Mon</td>
<td>Tue</td>
<td>Wed</td>
<td>Thu</td>
<td>Fri</td>
<td>Sat</td>
<td>Sun</td>
</tr>
<?php
// เร่ิมต้น สร้าง buffer array สำหรับแนวนอนครับ
$buffer=array();
foreach($res_return as $row){
// ตรวจเช็ควาตัวแปร ได้ถูกสร้างไว้หรือเปล่า ถ้าไม่ได้สร้าง ใสสร้าง อ้างอิงชื่อ mcname
if(!isset($buffer[$row['mcname']])) $buffer[$row['mcname']]=array();
// นำค่าเก็บไว้ใน buffer ในรูป array อ้างอิง mcname
$buffer[$row['mcname']][]=$row['valuecheck'];
}
// จบส่วนการเก็บค่าในแนวนอน
// เริ่มแสดงผลแนวนอน
foreach($buffer as $key=>$bf){
// $key =mcname $bf = array(valuecheckMon, valuecheckTue ... valuecheckSun)
?>
<tr><td><?php echo $key; ?></td><?php foreach($bf as $k => $vl) echo '<td>'.$vl.'</td>'; ?></tr>
<?php
}
?>
</table>
ประวัติการแก้ไข 2014-07-19 17:45:48
Date :
2014-07-19 17:17:37
By :
Chaidhanan
ขอบคุณอีกครับ run ได้สวยงาม
Date :
2014-07-19 18:42:59
By :
itsmenow
มีจุดต้องแก้ไขนิดนึงครับผมยังไม่เข้าใจ code ดีพอครับ
คือ เอาค่าที่เก็บใน field dtdailycheckvalue.valuecheck
มาแสดงใน column dtdailycheckvalue.vday คือ (Mon | Tue | Wed | Thu | Fri | Sat | Sun |)
ข้อมูลที่เก็บในDatabase
vday = SUN
อันนี้ตอน query run ไม่ตรงวันตาม column
แต่เวลา Quesy ออกมามันไม่ได้สนใจว่าวันอะไรครับ
แก้ไข Code ยังไงครับ
Form เขียนข้อมูลลง Database
ประวัติการแก้ไข 2014-07-20 23:04:58 2014-07-20 23:11:04
Date :
2014-07-20 23:02:31
By :
itsmenow
รบกวน คุณ Chaidhanan ลองดูให้หน่อยได้ไหมครับว่าต้องแก้ส่วนไหนเพราะว่าดู code แล้วซับซ้อนกับมือใหม่อย่างผมครับ
Date :
2014-07-21 11:23:22
By :
itsmenow
ขอดันกระทู้นิดนึงครับ ขอโทษด้วยครับ
Date :
2014-07-21 16:25:27
By :
itsmenow
ขอดันกระทู้นิดนึงครับ รอคำตอบยังแก้ปัญหาไม่ได้ครับ
Date :
2014-07-24 08:15:34
By :
itsmenow
Load balance : Server 03