Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,038

HOME > PHP > PHP Forum > ถ้าผมอยากทำรายงานแบบนี้ พอจะเป็นไปได้ไหมครับ หรือว่า ยังไงก็เป็นไปไม่ได้



 

ถ้าผมอยากทำรายงานแบบนี้ พอจะเป็นไปได้ไหมครับ หรือว่า ยังไงก็เป็นไปไม่ได้

 



Topic : 048041



โพสกระทู้ ( 51 )
บทความ ( 0 )



สถานะออฟไลน์




คือ ผมต้องการเรียกรายงานรวม เพื่อดูว่า ตั้งแต่วันที่ 1 ถึงวันที่ 30หรือ31 ของแต่ละเดือน มีคนส่งงานทั้งหมดกี่คน

รายงานที่อยากได้ตามรูปครับ



Uploaded with ImageShack.us

โดยในตัวอย่างนี้ บรรทัดแรก ป.1ห้อง1 วันที่ 2 ส่ง 2คน, วันที่5 ส่ง 6คน, วันที่ 8ส่ง7คน ฯลฯ
บรรทัดที่ 2 ป.1ห้อง2 วันที่1ส่ง3คน, วันที่2ส่ง2คน, วันที่5ส่ง4คน ฯลฯ

ซึ่งตัวเลขที่อยู่ในตาราง คือการนับจำนวน record ของช่อง date สมมุติว่า ของ ป.1ห้อง1 วันที่2มี5record นั่นคือ วันที่2 มีคนส่ง 5คน

นึกไอเดียการ query และการใช้ Function ไม่ออกแล้วอะครับ ไม่รู้ว่ารายงานแบบนี้พอจะเป็นไปได้ไหม

ช่วยผมทีนะครับ ขอบคุณจริงๆครับ



Tag : PHP, MySQL







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2010-09-01 15:18:25 By : muaeenth99 View : 1039 Reply : 9
 

 

No. 1



โพสกระทู้ ( 1,268 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Blogger

ขึ้นอยู่กับฐานข้อมูลด้วยค่ะว่าคุณเก็บค่าแบบไหน
ใช้ php ช่วยในการแสดงผลด้วย ก็น่าจะทำได้ค่ะ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-02 00:01:26 By : ultrasiam
 


 

No. 2



โพสกระทู้ ( 11,835 )
บทความ ( 10 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์


อยู่ที่การออกแบบฐานข้อมูลจริงๆ ครับ
มองว่าอาจจะต้องใช้ case , group by และ sub query
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-02 02:35:59 By : PlaKriM
 

 

No. 3



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

นอนดึกจริงพี่ปรากิม
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-02 02:44:23 By : pjgunner
 


 

No. 4



โพสกระทู้ ( 11,835 )
บทความ ( 10 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์


ไม่ได้นอนดึกครับ เพลียมาก กลับมาถึงหลับเลย เพิ่งตื่นตีหนึ่งกว่า
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-02 03:30:44 By : PlaKriM
 


 

No. 5



โพสกระทู้ ( 51 )
บทความ ( 0 )



สถานะออฟไลน์


ฐานข้อมูลที่ออกแบบก็มีแค่ 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>&nbsp;<td>
<?} $i++; } ?>



ออกมา ไม่เป็นผลครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-02 08:41:26 By : muaeenth99
 


 

No. 6

Guest


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>&nbsp;</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
 


 

No. 7



โพสกระทู้ ( 51 )
บทความ ( 0 )



สถานะออฟไลน์


ผมลองนำ 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>&nbsp;</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
 


 

No. 8

Guest


ที่เหลือก็เอาไปทำอีกนิดส์แล้วกัน

<?
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 "&nbsp;";
}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
 


 

No. 9



โพสกระทู้ ( 51 )
บทความ ( 0 )



สถานะออฟไลน์


ได้แล้วครับ ขอบคุณมากๆเลยนะครับ (เก่งจัง)

ขอให้ร่ำรวย สุขภาพแข็งแรงตลอดไปนะครับ ทุกท่านที่เข้ามาช่วย

ขอบคุณครับ


ประวัติการแก้ไข
2010-09-03 17:39:00
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-03 17:38:03 By : muaeenth99
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ถ้าผมอยากทำรายงานแบบนี้ พอจะเป็นไปได้ไหมครับ หรือว่า ยังไงก็เป็นไปไม่ได้
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 02
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2025 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่