ถ้าผมอยากทำรายงานแบบนี้ พอจะเป็นไปได้ไหมครับ หรือว่า ยังไงก็เป็นไปไม่ได้
ขึ้นอยู่กับฐานข้อมูลด้วยค่ะว่าคุณเก็บค่าแบบไหน
ใช้ php ช่วยในการแสดงผลด้วย ก็น่าจะทำได้ค่ะ
Date :
2010-09-02 00:01:26
By :
ultrasiam
อยู่ที่การออกแบบฐานข้อมูลจริงๆ ครับ
มองว่าอาจจะต้องใช้ case , group by และ sub query
Date :
2010-09-02 02:35:59
By :
PlaKriM
นอนดึกจริงพี่ปรากิม
Date :
2010-09-02 02:44:23
By :
pjgunner
ไม่ได้นอนดึกครับ เพลียมาก กลับมาถึงหลับเลย เพิ่งตื่นตีหนึ่งกว่า
Date :
2010-09-02 03:30:44
By :
PlaKriM
ฐานข้อมูลที่ออกแบบก็มีแค่ 4 ตารางอะครับ ที่จัดเก็บ record รายงาน
-----------------------------------------------------------
| date | Subroom | Grade | User |
-----------------------------------------------------------
| 2010-08-02 | 1 | 1 | Kom |
| 2010-08-02 | 1 | 1 | krish |
| 2010-08-05 | 1 | 1 | Kom |
| 2010-08-05 | 1 | 1 | krish |
| 2010-08-05 | 1 | 1 | Chai |
| 2010-08-05 | 1 | 1 | korn |
| 2010-08-05 | 1 | 1 | tank |
ซึ่ง ตาราง Grade จะ inner join กับ Table magrade
---------------------
| Grade | Name |
--------------------------
| 1 | ป.1 |
| 2 | ป.2 |
| 3 | ป.3 |
| 4 | ป.4 |
แบบนี้อะครับ
คำสั่ง SQL ผมใช้
select count(date) as total,date from report
where (date between '2010-08-01' and '2010-08-30')
Group by date
Order by Grade,subroom
ส่วนจำนวน ผมใช้การ count ตาราง date แล้วใช้วิธีการแยกตัววันที่ ด้วยคำสั่ง $chd=substr($c["date"],8,2);
จากนั้น ใช้คำสั่ง
Code (PHP)
$m1=date("m");
$dr=array("01"=>"31","02"=>"28","03"=>"31","04"=>"30","05"=>"31","06"=>"30","07"=>"31","08"=>"31","09"=>"30","10"=>"31","11"=>"30","12"=>"31");
for($i=1;$i<=$dr[$m1];$i++){
if($i==$chd){?>
<td><?=$c["total"];?></td>
<?}else{?>
<td> <td>
<?} $i++; } ?>
ออกมา ไม่เป็นผลครับ
Date :
2010-09-02 08:41:26
By :
muaeenth99
Code (PHP)
<?
include "conn.php";
?>
<html>
<head>
<title></title>
<style>
body{font-face:Ms Sans Serif;}
td{font-size:10pt}
</style>
</head>
<body>
<form>
<?
function GradeName($grade){
$sql = " Select name from grade where Grade = $grade ";
$result = mysql_query($sql);
$arrData = mysql_fetch_array($result);
return $arrData["name"];
}
$sqlCmd = "select count(mdate) 'numSend', Day(mdate) 'numDate', subroom, grade ".
" from report " .
" group by mdate, subroom, grade " .
" order by grade , subroom, numdate ";
$rptResult = mysql_query($sqlCmd);
//$arrRpt_Num = mysql_num_rows($rptResult);
?>
<table border="1">
<tr>
<th colspan="31">วันที่</th>
<th rowspan="2">ชื่อย่อยห้อง</th>
<th rowspan="2">รหัส</th>
<th rowspan="2">ชื่อรหัส</th>
</tr>
<tr>
<?
$num_day = 31;
for ($i=1;$i<=$num_day ;$i++){
echo "<td>$i</td>";
}
?>
</tr>
<?
while($row = mysql_fetch_array($rptResult)){
echo "<tr>";
for($i=1;$i<=$num_day;$i++){
if ($row["numDate"] == $i){
echo "<td>" . $row['numSend'] . "</td>";
}else{
echo "<td> </td>";
}
}
echo "<td>" . $row["subroom"] . "</td>";
echo "<td>" . $row["grade"] . "</td>";
echo "<td>" .GradeName($row["grade"]) . "</td>";
echo "</tr>";
}
?>
</table>
</form>
</body>
</html>
Date :
2010-09-02 11:30:25
By :
burn
ผมลองนำ Code ข้างบนไปลองดูแล้ว ผลลัพท์ที่ได้คือ
มันยังอยู่คนละบรรทัดอยู่อะครับ อยากให้มันอยู่บรรทัดเดียวกันเลย
ผมลองเอา $i++; ใส่เพิ่มเข้าไปก็ยังไม่อยู่บรรทัดเดียวกันเลยอะครับ
Code (PHP)
while($row = mysql_fetch_array($rptResult)){
echo "<tr>";
for($i=1;$i<=$num_day;$i++){
if ($row["numDate"] == $i){
echo "<td>" . $row['numSend'] . "</td>";
}else{
echo "<td> </td>";
}
}$i++;// ลองใส่ $row["numDate"]++; เข้าไปก็เหมือนเดิม
echo "<td>" . $row["subroom"] . "</td>";
echo "<td>" . $row["grade"] . "</td>";
echo "<td>" .GradeName($row["grade"]) . "</td>";
echo "</tr>";
}
ผลลัพท์ก็เหมือนเดิมอะครับ
ต้องทำยังไงต่อดีครับ ช่วยผมทีนะครับ
ขอบคุณครับ
Date :
2010-09-02 14:36:28
By :
muaeenth99
ที่เหลือก็เอาไปทำอีกนิดส์แล้วกัน
<?
include "conn.php";
?>
<html>
<head>
<title></title>
<style>
body{font-face:Ms Sans Serif;}
th, td{font-face:Ms Sans Serif;font-size:10pt}
</style>
</head>
<body>
<form>
<?
function GetNumSedingOnDate($numDate, $grade)
{
$sqlCmd = "select count(mdate) 'numSend', Day(mdate) 'numDate', subroom, grade ".
" from report " .
" group by mdate, subroom, grade " .
" having numdate = $numDate and grade = $grade ";
$result = mysql_query($sqlCmd);
$num_row = mysql_num_rows($result);
$row = mysql_fetch_array($result);
if ($num_row == 0){
return " ";
}else{
return $row["numSend"];
}
}
function getlastdayofmonth($month, $year) {
for ($day = 28; $day < 32; $day++) {
if (!checkdate($month, $day, $year)) return $day-1;
}
}
$today = getdate();
$month = $today['mon'];
$year = $today['year'];
//$last_day_on_month = date(’Y-m-d’,strtotime(’-1 second’,strtotime(’+1 month’,strtotime(date(’m').’/01/’.date(’Y').’ 00:00:00'))));
//echo $last_day_on_month;
$num_day = getlastdayofmonth($month, $year);
function GradeName($grade){
$sql = " Select name from grade where Grade = $grade ";
$result = mysql_query($sql);
$arrData = mysql_fetch_array($result);
return $arrData["name"];
}
$sqlCmd = "select * ".
" from grade Order by grade ";
$rptResult = mysql_query($sqlCmd);
//$arrRpt_Num = mysql_num_rows($rptResult);
?>
<table border="1" width="100%" cellpadding="0" cellspacing="0">
<tr>
<th colspan="<?=$num_day;?>">วันที่</th>
<th rowspan="2">ชื่อย่อยห้อง</th>
<th rowspan="2">รหัส</th>
<th rowspan="2">ชื่อรหัส</th>
</tr>
<tr>
<?
for ($i=1;$i<=$num_day ;$i++){
echo "<td>$i</td>";
}
?>
</tr>
<?
while($row = mysql_fetch_array($rptResult)){
echo "<tr>";
for($i=1;$i<=$num_day;$i++){
echo "<td>" . GetNumSedingOnDate($i, $row["Grade"]) . "</td>";
}
echo "<td>" . $row["Name"] . "</td>";
echo "<td>" . $row["Grade"] . "</td>";
echo "<td>" .$row["Name"] . "</td>";
echo "</tr>";
}
?>
</table>
</form>
</body>
</html>
Date :
2010-09-02 16:08:56
By :
burn
ได้แล้วครับ ขอบคุณมากๆเลยนะครับ (เก่งจัง)
ขอให้ร่ำรวย สุขภาพแข็งแรงตลอดไปนะครับ ทุกท่านที่เข้ามาช่วย
ขอบคุณครับ
ประวัติการแก้ไข 2010-09-03 17:39:00
Date :
2010-09-03 17:38:03
By :
muaeenth99
Load balance : Server 02