ช่วยแก้ไขโค๊ดการค้นหาข้อมูลแสดงในปีงบประมาณ ให้ด้วยครับ !!
ขอขอบคุณพี่ๆ ทุกท่านไว้ล่วงหน้ามา ณ ที่นี้เลยนะครับ
จากรูป :
----------------------------
จากโค๊ด:
<?php
$connDB = mysql_connect("localhost","root","123");
$dbName = "db_depart";
mysql_query("SET NAMES tis-620", $connDB);
mysql_query("USE $dbName");
?>
<script type="text/javascript" language="JavaScript1.2">
function fncSubmit(){
if(document.testReqSupp.MQ.value != 0 && testReqSupp.YQ.value == 0){
alert(' กรุณาเลือกปีงบประมาณด้วย !! ');
document.testReqSupp.YQ.focus();
return false;
}
}
</script><style type="text/css">
<!--
body,td,th {
font-family: Tahoma, sans-serif, serif, MS Serif;
font-size: 13px;
color: #000000;
}
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
-->
</style>
<form action="testReqSupp.php" method="get" enctype="multipart/form-data" name="testReqSupp" onsubmit="JavaScript:return fncSubmit();">
<table width="650" border="1" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="77" colspan="2" valign="top"><table width="100%" border="0" cellpadding="1" cellspacing="2" class="border">
<tr>
<td height="22" colspan="4" align="center" bgcolor="#0782CB"><b>รายงานเวลารับเรื่องการแจ้งปัญหา/บริการ</b></td>
</tr>
<tr>
<td width="39%" align="right">เดือน :</td>
<td width="11%">
<?php // select Month
echo "<select name=\"MQ\" id=\"MQ\" class=\"listMenuYQ\">";
echo "<option value=\"0\" selected=\"selected\">-- ทุกเดือน --</option>";
for($i=1; $i<=12; $i++){
$month = array(1=>"มกราคม",2=>"กุมภาพันธ์",3=>"มีนาคม",4=>"เมษายน",5=>"พฤษภาคม",6=>"มิถุนายน",7=>"กรกฎาคม",8=>"สิงหาคม",9=>"กันยายน",10=>"ตุลาคม",11=>"พฤศจิกายน",12=>"ธันวาคม"); // loop array month
?>
<option value="<?php echo $i; ?>" <?php if($i == $_REQUEST['MQ']){echo "selected";} ?>><?php echo $month[$i]; ?></option>
<?php } ?></td>
<td width="14%" height="18" align="right">ปีงบประมาณ :</td>
<td width="36%">
<?php // select year
// Connect Table :> tb_tb_userreq
$sqlYQ = "SELECT reqYQ FROM tb_testreqsupp GROUP BY reqYQ ORDER BY reqYQ DESC";
$resYQ = mysql_query($sqlYQ) or die ("$msgAlert");
echo "<select name=\"YQ\" id=\"YQ\" class=\"listMenuYQ\">";
echo "<option value=\"0\" selected=\"selected\">-- ทุกปี --</option>";
// loop while year
while($roYQ = mysql_fetch_array($resYQ)){
?>
<option value="<?php echo $roYQ['reqYQ']; ?>"<?php if($roYQ['reqYQ'] == $_REQUEST['YQ']){echo "selected";} ?>><?php echo $roYQ['reqYQ']; ?></option>
<?php }
echo "</select>";
?>
</td>
</tr>
<tr>
<td width="39%" height="25"> </td>
<td colspan="2" align="center"><input name="search" type="submit" value=" ค้นหา "></td>
<td width="36%"> </td>
</tr>
</table></td>
</tr>
<tr>
<td height="57" colspan="2" valign="top">
<table width="100%" border="0" cellpadding="0" cellspacing="1">
<tr>
<td height="29" align="center" bgcolor="#0782CB"><b>ลำดับการแจ้ง</b></td>
<td width="29%" height="29" align="center" bgcolor="#0782CB"><b>วัน-เวลา</b><span class="txt-HSmall"> (ที่แจ้ง)</span></td>
<td width="28%" height="29" align="center" bgcolor="#0782CB"><b>วัน-เวลา</b><span class="txt-HSmall"> (รับทราบ)</span></td>
<td align="center" bgcolor="#0782CB"><b>ระยะเวลาที่รับทราบ</b> <br>
<span class="txt-HSmall">(วัน, ชั่วโมง : นาที : วินาที)</span></td>
</tr>
<?php // search data
$sql = "SELECT * FROM tb_testreqsupp ";
if($_REQUEST['MQ'] == "" && $_REQUEST['YQ'] == "" ){ // ไม่เลือกอะไรเลย (ค่าปกติ) แสดงข้อมูลเดือนและปีปัจจุบัน (ครั้งแรกที่เปิด)
$sql .= "WHERE DATE(reqSupp) BETWEEN '".date('Y-m-01')."' AND '".date('Y-m-d')."' ORDER BY reqID";
}elseif($_REQUEST['MQ'] == "0" && $_REQUEST['YQ'] == "0"){ // เลือกทุกเดือน, เลือกทุกปี
$sql .= "ORDER BY reqID";
}elseif($_REQUEST['MQ'] != "0" && $_REQUEST['YQ'] != "0"){ // เลือกเดือน, เลือกปี
$sql .= "WHERE YEAR(reqSupp) = '".($_REQUEST['YQ']-543)."' && month(reqSupp)= '".$_REQUEST['MQ']."' ORDER BY reqID";
}elseif($_REQUEST['MQ'] == "0" && $_REQUEST['YQ'] != "0"){ // ไม่เลือกเดือน, เลือกปี
$sql .= "WHERE YEAR(reqSupp) = '".($_REQUEST['YQ']-543)."' ORDER BY reqID";
}
//
$res = mysql_query($sql) or die ("$sql");
while($row= mysql_fetch_array($res)){
$bgColor = ($i++ %2) ? '#DFECF9':'#EEF5FD'; // สลับสีแถว
?>
<tr bgcolor="<?php echo $bgColor;?>">
<td width="14%" height="20" align="center"><?php echo $row['reqID']; ?></td>
<td width="29%" height="20" align="center">
<?php // วันเวลา (ที่แจ้งปัญหา)
$reqDate = $row['reqDate'];
$dateDT = explode(" ",$reqDate);
$dateDA = explode("-",$dateDT[0]);
echo $dateDA[2]."/".$dateDA[1]."/".($dateDA[0]+543)." ".$dateDT[1];
// echo $reqDate;
?></td>
<td width="28%" height="20" align="center"><?php // วันเวลา (รับทราบปัญหา)
$reqSupp = $row['reqSupp'];
$dateWT = explode(" ",$reqSupp);
$dateDW = explode("-",$dateWT[0]);
echo $dateDW[2]."/".$dateDW[1]."/".($dateDW[0]+543)." ".$dateWT[1];
// echo $reqSupp;
?></td>
<?php // คำนวณหาค่าต่างระยะวัน/เวลา : เวลาที่รับทราบ
$sqlRT = mysql_query("SELECT TIMESTAMPDIFF(SECOND,'$reqDate','$reqSupp') AS diff FROM tb_testreqsupp");
$resRT = mysql_fetch_array($sqlRT);
$diff = $resRT['diff'];
$diffSeconds = $diff%60; // คำนวณ วินาที
$diffMinutes = (int)($diff/60)%60; // คำนวณ นาที
$diffHours = (int)($diff/(60*60))%24; // คำนวณ ชั่วโมง
$diffDay = (int)($diff/(60*60))/24; // คำนวณ วัน
?>
<td width="29%" align="right">
<?php echo sprintf("%2d",$diffDay)." วัน, ".sprintf("%02d",$diffHours).":".sprintf("%02d",$diffMinutes).":".sprintf("%02d",$diffSeconds); ?>
</td>
</tr>
<?php } ?>
</table></td>
</tr>
</table>
</form>
</body>
</html>
---------------------------
จากโค๊ดข้างบน ส่วนที่เป็นตัวอักษรสีดำ ผมไม่รู้ว่าจะเขียนโค๊ดอย่างไร ที่ให้ค้นหาตามปีงบประมาณ แล้วเช่น ข้อมูลในเดือนตุลาคม - ธันวาคม 2551 นั้น จะต้องไปแสดงในปีงบประมาณ 2552 นะครับ รบกวนช่วยเหลือผมด้วยนะคับ...Tag : - - - -
Date :
2010-06-16 14:29:45
By :
pukmtec
View :
3712
Reply :
6
ผมเคยเจอปัญหานี้เหมือนกันเคยเขียนเว็บให้โรงพยาบาลแห่งหนึ่ง ให้แสดงข้อมูลในปีงบประมาณ นั้นๆ
แก้โดยสร้าง function ขึ้นมาหนึ่งตัวเพื่อกำหนดว่า เดือน ดังกล่าวควรอยู่ในงบประมาณใด
ตอนเราจะหาว่าเป็นปีงบประมาณใด เราต้อง ใช้ ตัวแปล 2 ตัวคือ เดือน และ ปี
เช่น
เดือน 11 ปี 2552 ก็ต้องเป็นปีงบประมาณ 2553
หรือ เดือน 1 ปี 2553 ก็ต้องเป็นปีงบประมาณ 2553
หรือ เดือน 10 ปี 2553 ก็ต้องเป็นปีงบประมาณ 2554
เป็นต้น
เราก็เขียน Function ไว้เป็นตัวเก็บไว้ไฟล์นึง จะใช้มันก็เรียกผ่านตัวแปล
Date :
2010-06-16 15:22:40
By :
aimoomoo
รบกวนช่วยแก้ไข หรือเขียนมาให้เห็นอย่างคร่าว ๆ ได้หรือไม่ครับ ขอขอบคุณมาก ๆ ครับ
Date :
2010-06-16 16:27:24
By :
pukmtec
ลองดูนะไม่แน่จัย ว่าครอบคุมเปล่า ประยุคใช้ดู codeที่ เคยทำไม่รู้อยูไหน
Code (PHP)
<?php
$m="2";
$y="2553";
if($m>=10){
$show=$y+1;
}else{
if($m>=1){
$show=$y;
}
}
echo "ปีงบประมาณ $show";
?>
Date :
2010-06-16 18:20:15
By :
aimoomoo
ดูโค๊ดของพี่แล้ว งงสุด ๆ ว่า ตัวแปรแต่ละตัวมาจากไหน แล้วเราจะไม่สามารถกำหนดว่าเป็นปี 2553 แบบเจาะจงตายตัวได้ เพราะปีก็เปลี่ยนไปเรื่อย ๆ นะครับ คงจะเอาโค๊ดพี่มาใช้งานเกี่ยวกับ serach ไม่ได้นะครับ แต่อย่างไรผมก็ขอขอบคุณมาก ๆ
Date :
2010-06-16 18:31:01
By :
pukmtec
ขอตอบแบบเป็น PURE SQL แล้วกันนะคะ เพราะส่วนตัวจะ ANTI PHP มากกว่า VB.NET สะอีก
ไม่ได้ว่า PHP ไม่ดี เพียงแต่ไม่ชอบเป็นการส่วนตัวค่ะ
ปัญหานี้ คือ คุณต้องการดึงเจ้าข้อมูลประจำปี มาแสดง
โดยที่ ข้อมูล ปี X คือ ข้อมูลจากวันที่ 1 ตค.ปี x-1 ถึง 30 กย. ปี X เท่านั้นเอง
ปกติจะใช้ MYSQL ใช่ปะคะ
แบบง่ายคือ สร้าง COLUMN ปีงบประมาณขึ้นมา
*แทน date_time_field ด้วยชื่อ field ของคุณค่ะ
Code (PHP)
SELECT
IF(MONTH(date_time_field)>=10,YEAR(date_time_field)+1 ,YEAR(date_time_field))
AS Annual_budget
FROM tb_testreqsupp
WHERE เงื่อนไขการเลือกข้อมูล
หรือถ้ายาวไปก็เขียน STORE PROCEDURE ไว้สั้นๆดังนี้ค่ะ
Code (PHP)
DELIMITER $$
DROP FUNCTION IF EXISTS `GET_ANNUAL_BUDGET_YEAR` $$
CREATE FUNCTION `GET_ANNUAL_BUDGET_YEAR`
(_VAR_INCOMING_DATE DATETIME)
RETURNS INT
BEGIN
DECLARE _DATE_MONTH INT DEFAULT 0 ;
DECLARE _M_RET INT DEFAULT 0 ;
SET _DATE_MONTH = MONTH(_VAR_INCOMING_DATE);
/* ลำดับของเดือนตุลาคม คือ 10 */
IF (_DATE_MONTH >= 10) THEN
/*เป็นปี งปม. ถัดไปชะปะคะ*/
SET _M_RET = YEAR(_VAR_INCOMING_DATE) +1 ;
ELSE
SET _M_RET = YEAR(_VAR_INCOMING_DATE) ;
END IF ;
RETURN _M_RET ;
END $$
DELIMITER
usage ก็ดังนี้ค่ะ
Code (PHP)
SELECT GET_ANNUAL_BUDGET_YEAR(date_time_field) AS Annual_budget
FROM tb_testreqsupp
WHERE เงื่อนไขการเลือกข้อมูล
เช่นเลือกข้อมูลเฉพาะปีงบประมาณ 2553
ตรง WHERE CLAUSE จะเขียนได้ว่า
WHERE GET_ANNUAL_BUDGET_YEAR(date_time_field) +543 = 2553
543 คือ ผลต่างของ คศ กับ พศ ค่ะ
Date :
2010-06-16 19:12:00
By :
blurEyes
แต่โบราณว่ายิ่งเกลียดยิ่งเจอนะ
Date :
2010-06-16 20:25:59
By :
tungman
Load balance : Server 03