สอบถามเรื่องการ select ไตรมาสหน่อยครับ ตอนนี้เริ่มเข้าใจนิดหนึ่งแล้วครับ (ตอนนี้รันผ่านไร้ปัญหาละครับ ^_^ สนใจดูแนวคิดการเลือกไตรมาสแบบไทยเชิญด้านในครับ)
Code
https://www.thaicreate.com/php/forum/110523.html
จากกระทู้เมื่อของผม ผมพอเข้าใจแล้วว่า select เงื่อนไข ไตรมาส จากตารางนี้เลย
แต่พอผมลองทำครับ กลับพบ ปัญหาว่าเมื่อผมใช้ between
เช่น
select *
from tbclearbill where Clearbilldate between '2012-10-01' and '2012-12-31'
ซึ่งอันนี้ เป็นไตรมาส 1 ของปีงบประมาณครับ
แล้วถ้า สมมุติ select ไตรมาส 2 โค้ด SQL จะเป็นแบบนี้
select *
from tbclearbill where Clearbilldate between '2013-01-01' and '2012-03-31'
ซึ่งปีมันไม่เหมือนกันอะครับ เพราะ ปีงบประมาณถึงแม้จะชื่อปี 2556 ก็จริงแต่นับ ไตรมาสแรกที่ 1 ตุลาคม 2555 ครับ
Value จากค่า $_POST มันยังเป็น 2012 อยู่เลยครับ เรามีวิธี เลือกไตรมาแบบ ไม่สนใจปีไหมครับ
หรือมีฟังก์ชัน ดึงไตรมาสจากการ mysql_fetch_array ไหมครับ
ผมว่า สามตาราง มันงงมากเลยครับ คนสร้างอย่างผมยัง งงสุดๆเลยครับ จะเอามา จึ้ยกะดึ้ย ยังไงเลยครับ
Code ส่วน select ส่งค่าไปอีกไฟล์ ผ่านค่า $_POST
Code (PHP)
<select name="quarter" id="quarter">
<option>กรุณาเลือกไตรมาส</option>
<option value="-10-01">ไตรมาสที่ 1 (1 ต.ค. - 31 ธ.ค.)</option>
<option value="-01-01">ไตรมาสที่ 2 (1 ม.ค. - 31 มี.ค.)</option>
<option value="-04-01">ไตรมาสที่ 3 (1 เม.ย. - 30 มิ.ย.)</option>
<option value="-07-01">ไตรมาสที่ 4 (1 ก.ค. - 30 ก.ย.)</option>
</select>
ผมเปลี่ยน value quarter เป็น แบบนี้ครับ แล้วก็ในอีกหน้าว่าจะเอาค่า $_POST มาใส่ครับ แต่ก็ไม่ได้อะครับ มัน มีแต่เดือนเริ่มงบไม่มีเดือนจบงบอะครับ
Code (PHP)
$type = $_POST['type'];
$strSQL = "SELECT Clearbilldate, Clearbillnumber, Clearbillname, Clearbillpay, Clearbillpayer, Clearbillchage, Clearbillnote, Budgetcategoryamount,Budgetyear
FROM tbclearbill, tbbudgettype, tbbudgetyear, tbbudgetcategory
WHERE tbclearbill.BudgettypeID = tbbudgettype.BudgettypeID
AND tbclearbill.BudgetyearID = tbbudgetyear.BudgetyearID
AND tbclearbill.BudgettypeID = tbbudgetcategory.BudgettypeID
AND tbclearbill.BudgettypeID = ".$type."
AND tbclearbill.Clearbilldate BETWEEN ".$yeareng.'-'.$_POST['quarter']." AND
ORDER BY `tbclearbill`.`Clearbilldate` ASC
";
อันนี้ส่วนโค้ดอีกหน้าครับ ว่าจะใช้ tbclearbill.Clearbilldate BETWEEN ".$yeareng.'-'.$_POST['quarter']." AND ครับแต่ทำไปทำมารู้สึกว่ามันจะรันไม่ผ่านอะครับ Tag : PHP, HTML/CSS, Ajax, jQuery, Crystal Report
ประวัติการแก้ไข 2014-08-09 21:16:36 2014-08-09 21:17:09 2014-08-09 21:18:33 2014-08-09 21:19:43 2014-08-09 21:20:00 2014-08-10 13:45:04 2014-08-10 13:45:53
Date :
2014-08-09 21:15:49
By :
nest12345
View :
3233
Reply :
20
Code (SQL)
select c.BudgettypeID, q.quarter, c.Budgetcategoryamount amt, sum(b.Clearbillpay) pay
from (select 1 as quarter, '2012-10-01' qstart, '2012-12-31' qend) q
left join tbclearbill b on b.Clearbilldate between q.start and q.qend
left join tbbudgetcategory c on c.BudgettypeID=b.BudgettypeID
group by c.BudgettypeID, q.quarter
ประวัติการแก้ไข 2014-08-09 21:37:52
Date :
2014-08-09 21:36:56
By :
Chaidhanan
ลองดู
แก้ Code ส่วน select ส่งค่าไปอีกไฟล์ ผ่านค่า $_POST
Code (PHP)
<select name="quarter" id="quarter">
<option>กรุณาเลือกไตรมาส</option>
<option value="1">ไตรมาสที่ 1 (1 ต.ค. - 31 ธ.ค.)</option>
<option value="2">ไตรมาสที่ 2 (1 ม.ค. - 31 มี.ค.)</option>
<option value="3">ไตรมาสที่ 3 (1 เม.ย. - 30 มิ.ย.)</option>
<option value="4">ไตรมาสที่ 4 (1 ก.ค. - 30 ก.ย.)</option>
</select>Code (PHP)
แก้
Code (PHP)
$type = $_POST['type'];
$yeareng2=$yeareng-1;
$qua=$_POST['quarter'];
switch ($qua){
case 0:
echo"ต้องเลือกไตรมาสก่อน";
exit();
case 1:
$qua=" '$yeareng2-10-%' or dat like '$yeareng2-11-%' or dat like '$yeareng2-12-%' ";
break;
case 2:
$qua=" '$yeareng-01-%' or dat like '$yeareng-02-%' or dat like '$yeareng-03-%' ";
break;
case 3:
$qua=" '$yeareng-04-%' or dat like '$yeareng-05-%' or dat like '$yeareng-06-%' ";
break;
case 4:
$qua=" '$yeareng-07-%' or dat like '$yeareng-08-%' or dat like '$yeareng-09-%' ";
break;
}
$strSQL = "SELECT Clearbilldate, Clearbillnumber, Clearbillname, Clearbillpay, Clearbillpayer, Clearbillchage, Clearbillnote, Budgetcategoryamount,Budgetyear
FROM tbclearbill, tbbudgettype, tbbudgetyear, tbbudgetcategory
WHERE tbclearbill.BudgettypeID = tbbudgettype.BudgettypeID
AND tbclearbill.BudgetyearID = tbbudgetyear.BudgetyearID
AND tbclearbill.BudgettypeID = tbbudgetcategory.BudgettypeID
AND tbclearbill.BudgettypeID = ".$type."
AND tbclearbill.Clearbilldate like $qua AND
ORDER BY `tbclearbill`.`Clearbilldate` ASC
";
Date :
2014-08-10 03:00:30
By :
chai19
บรรทัดที่ 27 AND tbclearbill.Clearbilldate like $qua AND น่าจะมีอะไรเกินมานะครับ
$qua=" '$yeareng2-10-%' อันนี้น่าสนใจดีครับ แต่ยังกำกวมในแต่ละกรณี
กรณีที่เป็นเดือน ถ้ากำหนด 1, 2, 3, 4, ..., 12 ก็ต้องเป็นแบบนี้เสมอ
กรณีที่เป็นเดือน ถ้ากำหนด 01, 02, 03, 04, ..., 12 ก็ต้องเป็นแบบนี้เสมอ
ในกรณีวันก็เช่นเดียวกันครับ วันที่ 1, 2, 3, 4, ... 31
ในกรณีวันก็เช่นเดียวกันครับ วันที่ 01, 02, 03, 04, ... 31
และที่สำคัญที่สุดรูปแบบวันที่ต้องเป็น yyyy-mm-dd เสมอ เราไม่มีสิทธิ์ไปโต้แย้งฝรั่งเขาได้ครับ
http://www.codeproject.com/Articles/463508/NET-CLR-Injection-Modify-IL-Code-during-Run-time
ประวัติการแก้ไข 2014-08-10 03:23:31 2014-08-10 03:29:46 2014-08-10 03:30:25 2014-08-10 03:35:17
Date :
2014-08-10 03:21:48
By :
หน้าฮี
ลองดูหน้า HTML สำหรับ กำหนดค่าแบบนี้ คล่องตัวกว่าไหมครับ
Code (PHP)
<form method="get" >
<select name="targetYear">
<?php
$curYear=date('Y'); // current Year
$m=date('m'); // current month
if($m>9) $curYear++; // ถ้าเดือนปัจจบันเป็น เดือน 10-12 ปีงบประมาณ = ปีหน้า = ปีบัจจุบัน + 1
$startYear=$curYear - 3; //กำหนดให้แสดงปีงบประมาณย้อนหลัง 3 ปี จากปีปัจจุบัน
for($startYear; $startYear<=$curYear; $startYear++){
echo "<option value='$startYear'", ($startYear==$curYear ? 'SELECTED' : '' ) ,">$startYear</option>";
} // default current year
?>
</select>
<select name="quarter" id="quarter">
<option value="1" <?php echo ($m<4? 'SELECTED' : '')?> >ไตรมาสที่ 1 (1 ต.ค. - 31 ธ.ค.)</option>
<option value="2" <?php echo ($m>3 && $m<7 ? 'SELECTED' : '')?> >ไตรมาสที่ 2 (1 ม.ค. - 31 มี.ค.)</option>
<option value="3" <?php echo ($m>6 && $m<10 ? 'SELECTED' : '')?> >ไตรมาสที่ 3 (1 เม.ย. - 30 มิ.ย.)</option>
<option value="4" <?php echo ($m>9? 'SELECTED' : '')?> >ไตรมาสที่ 4 (1 ก.ค. - 30 ก.ย.)</option>
</select>
<input type="submit" />
</form>
Date :
2014-08-10 07:35:14
By :
Chaidhanan
สำหรับตัว แสดงงบ
Code (PHP)
<?php
$mnt(0, array(1, '-10-01', '-12-31'), array(0, '-01-31', '-03-31'), array(0, '-04-30', '-06-30'), array(0, '-07-31', '-09-30') );
$quarter=$_REQUEST['quarter'];
$b=$mnt[$quarter];
$targetYear=$_REQUEST['targetYear']-$b[0];
$stMnt=($targetYear).$b[1];
$enMnt=($targetYear).$b[2];
$qr="select c.BudgettypeID, c.Budgetcategoryamount amt, sum(b.Clearbillpay) pay
from tbclearbill b
left join tbbudgetcategory c on c.BudgettypeID=b.BudgettypeID
where b.Clearbilldate between $stMnt and $enMnt ";
?>
ทั้งนี้รูปแบบการทำงานนี้ ยังไม่สามารถ แสดงรายงานได้ครบถ้วน
เพราะถ้าเป็น ไตรมาส 2 ยอดงบประมาณคงเหลือ มันต้อง ลบ จาก ไตรมาส 1 ด้วย จะทำอย่างไรครับ
และถ้าเป็น ไตรมาส 3 และ 4 ล่ะ
ติ๊กต๊อก ติ๊กตีอก
Date :
2014-08-10 07:42:22
By :
Chaidhanan
ขอบคุณทุกท่านจริงๆนะครับ ตื่นมาละตกใจจริงๆครับ
ขอเวลาผมประมวลผล 1 วันนะครับ
ตอนนี้ไปไม่ถูกครับ ไม่รู็จะเริ่มตรงไหนดี
ไม่รู้ยังไงจะตั้งกระทู้ถามใหม่นะครับ
ประวัติการแก้ไข 2014-08-10 09:04:53 2014-08-10 09:07:30 2014-08-10 09:12:15
Date :
2014-08-10 09:00:15
By :
nest12345
ตอบความคิดเห็นที่ : 10 เขียนโดย : หน้าฮี เมื่อวันที่ 2014-08-10 10:21:44
รายละเอียดของการตอบ ::
ขอบคุณเรื่องแนวคิดนะครับ
ตอบความคิดเห็นที่ : 6 เขียนโดย : Chaidhanan เมื่อวันที่ 2014-08-10 07:42:22
รายละเอียดของการตอบ ::
ขอบคุณคำสั่ง select นะครับ ข้อมูลมาเกือบครบละครับ
ตอบความคิดเห็นที่ : 3 เขียนโดย : chai19 เมื่อวันที่ 2014-08-10 03:00:30
รายละเอียดของการตอบ ::
โค้ดของพี่เข้ใช้งานง่ายมากครับ เลือกไตรมาสได้ แต่ผมเอามาแก้ไขนิดหน่อยซึ่งตอนนี้ แสดงไตรมาส ได้ และ ปี ก็สามารถเปลี่ยนได้ละครับ
Code (PHP)
<?
$sql11 = "select * from tbbudgetyear where BudgetyearID = ".$_POST['year']." ";
$objQuery11 = mysql_query($sql11);
while($row11 = mysql_fetch_array($objQuery11))
{
$nest = $row11['Budgetyear'];
}
?>
<?
$qua=$_POST['quarter']; //เก็บค่า 1 2 3 4
$yeareng = $nest - 543 ; // แปลง ปีไทย เป็น ปีฝรั่ง
$yeareng2 = $yeareng-1; // ปีฝรั่ง - 1 เพราะไตรมาสแรก อยู่คนละปีกัน
switch ($qua){
case 0:
echo"ต้องเลือกไตรมาสก่อน";
exit();
case 1:
$qua=" BETWEEN '$yeareng2-10-1' AND '$yeareng2-12-31' ";
// ไตรมาส 1 ค่าระหว่าง '$yeareng2-10-1' AND '$yeareng2-12-31'
break;
case 2:
$qua="BETWEEN '$yeareng-01-1' AND '$yeareng-03-31' ";
break;
case 3:
$qua="BETWEEN '$yeareng-04-1' AND '$yeareng-06-30' ";
break;
case 4:
$qua="BETWEEN '$yeareng-07-1' AND '$yeareng-09-30' ";
break;
}
echo $qua ; "</br>";
?>
ผมเปลี่ยนเป็น BETWEEN ครับ ข้อมูลมาครบ ^^
สำหรับผู้สนใจนะครับ ผมแปะโค้ดไว้ให้นะครับ สามารถ select ไตรมาสแบบไทยได้
หน้านี้จะเป็นการออกรายงาน แบบ doc แนวนอนด้วยนะครับ
pdf รอว่างๆค่อยทำครับ ยากเกิน
หน้าเลือกเงื่อนไขครับ
Code (PHP)
<?
require ('connect.php');
session_start();
if($_SESSION['UserID'] == ""){
header("Content-type: text/html; charset=utf-8");
echo"<script language='JavaScript' >";
echo"alert('กรุณากรอกข้อมูลเพื่อเข้าสู่ระบบ');";
echo"</script>";
echo "<meta http-equiv='refresh' content='0;url=index.php' />";
exit();
}
?>
<style type="text/css">
<!--
.style1 {
font-family: "TH SarabunPSK";
font-size: 18pt;
font-weight: bold;
}
.style2 {
font-family: "TH SarabunPSK";
font-size: 16pt;
font-weight: bold;
}
.style5 {cursor: hand; font-weight: normal; color: #000000;}
.style9 {font-family: Tahoma; font-size: 12px; }
.style11 {font-size: 12px}
.style13 {font-size: 9}
.style16 {font-size: 9; font-weight: bold; }
.style17 {font-size: 12px; font-weight: bold; }
-->
</style>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ระบบสนับสนุนการตัดสินใจ</title>
<script language="javascript">
function fncSubmit(strPage)
{
if(strPage == "page1")
{
document.frmMain.action="report_clearbill.php";
}
if(strPage == "page2")
{
document.frmMain.action="report_totalclearbill.php";
}
if(strPage == "page3")
{
document.frmMain.action="report_clearbill.php";
}
document.frmMain.submit();
}
</script>
<script language = "JavaScript">
//**** List Province (Start) ***//
function ListProvince(SelectValue)
{
frmMain.ddlProvince.length = 0
//*** Insert null Default Value ***//
var myOption = new Option('','')
frmMain.ddlProvince.options[frmMain.ddlProvince.length]= myOption
<?
$intRows = 0;
$strSQL = "SELECT tbbudgetcategory.BudgettypeID, tbbudgettype.Budgettype, tbbudgetcategory.BudgetyearID
FROM tbbudgetcategory, tbbudgetyear, tbbudgettype
WHERE tbbudgetcategory.BudgettypeID = tbbudgettype.BudgettypeID
AND tbbudgetyear.BudgetyearID = tbbudgetcategory.BudgetyearID
ORDER BY `tbbudgetcategory`.`BudgettypeID` ASC
";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
$intRows = 0;
while($objResult = mysql_fetch_array($objQuery))
{
$intRows++;
?>
x = <?=$intRows;?>;
mySubList = new Array();
strGroup = <?=$objResult["BudgetyearID"];?>;
strValue = "<?=$objResult["BudgettypeID"];?>";
strItem = "<?=$objResult["Budgettype"];?>";
mySubList[x,0] = strItem;
mySubList[x,1] = strGroup;
mySubList[x,2] = strValue;
if (mySubList[x,1] == SelectValue){
var myOption = new Option(mySubList[x,0], mySubList[x,2])
frmMain.ddlProvince.options[frmMain.ddlProvince.length]= myOption
}
<?
}
?>
}
//**** List Province (End) ***//
</script>
</head>
<body>
<table width="869" height="380" border="1">
<tr>
<td align="center"><p>
</p>
<form name="frmMain" method="post" action="pdf_clearbill.php">
<p>
เมนูเลือกรายงาน
</p>
<p></p>
<p>
<select id="ddlGeo" name="year" onChange = "ListProvince(this.value)" OnChange="resutName(this.value);" >
<option selected value="">กรุณาเลือกปีงบประมาณ</option>
<?
$objQuery = mysql_query("SELECT * FROM tbbudgetyear");
while($objResult = mysql_fetch_array($objQuery)){
?>
<option value="<? echo $objResult['BudgetyearID'] ?>"> <? mysql_query("SET NAMES UTF8"); echo $objResult['Budgetyear'] ?></option>
<? }?>
</select>
</p>
<p>
</select>
<select name="quarter" id="quarter">
<option value="1" <?php echo ($m<4? 'SELECTED' : '')?> >ไตรมาสที่ 1 (1 ต.ค. - 31 ธ.ค.)</option>
<option value="2" <?php echo ($m>3 && $m<7 ? 'SELECTED' : '')?> >ไตรมาสที่ 2 (1 ม.ค. - 31 มี.ค.)</option>
<option value="3" <?php echo ($m>6 && $m<10 ? 'SELECTED' : '')?> >ไตรมาสที่ 3 (1 เม.ย. - 30 มิ.ย.)</option>
<option value="4" <?php echo ($m>9? 'SELECTED' : '')?> >ไตรมาสที่ 4 (1 ก.ค. - 30 ก.ย.)</option>
</select>
</p>
<p>
<select id="ddlProvince" name="type" >
<option>ต้องเลือกปีงบประมาณก่อน</option>
</select>
</p>
<p> </p>
<p>
<input name="btnButton1" type="button" value="พิมพ์รายงานประจำปี" onClick="JavaScript:fncSubmit('page1')">
<input name="btnButton2" type="button" value="พิมพ์รายงานรวมหมวดหมู่" onClick="JavaScript:fncSubmit('page2')">
<input name="btnButton3" type="button" value="พิมพ์รายงานแยกตามหมวดหมู่" onClick="JavaScript:fncSubmit('page3')">
</p>
</form>
</tr>
</table>
</body>
</html>
หน้าออกรายงานครับ
Code (PHP)
<?
require("connect.php");
header("Content-Type: application/msword");
header('Content-Disposition: attachment; filename="Report_bugget.doc"');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<title>My Title Here</title>
<style type="text/css">
<!--
.style1 {
font-family: "TH SarabunPSK";
font-size: 18pt;
font-weight: bold;
}
.style2 {
font-family: "TH SarabunPSK";
font-size: 16pt;
font-weight: bold;
}
.style3 {
font-family: "TH SarabunPSK";
font-size: 16pt;
}
.style5 {cursor: hand; font-weight: normal; color: #000000;}
.style9 {font-family: Tahoma; font-size: 12px; }
.style11 {font-size: 12px}
.style13 {font-size: 9}
.style16 {font-size: 9; font-weight: bold; }
.style17 {font-size: 12px; font-weight: bold; }
-->
</style>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 9">
<meta name=Originator content="Microsoft Word 9">
<title>My Title Here</title>
<style>
@page Section1 {size:595.45pt 841.7pt; margin:1.0in 1.25in 1.0in 1.25in;mso-header-margin:.5in;mso-footer-margin:.5in;mso-paper-source:0;}
div.Section1 {page:Section1;}
@page Section2 {size:841.7pt 595.45pt;mso-page-orientation:landscape;margin:1.25in 1.0in 1.25in 1.0in;mso-header-margin:.5in;mso-footer-margin:.5in;mso-paper-source:0;}
div.Section2 {page:Section2;}
</style>
</head>
<?php
Class func{
function trimas($i){
return $i > 3 ? ( $i > 6 ? ($i > 9 ? 'T4' : 'T3') : 'T2') : 'T1';
}
function mothengmini($data){
$mothcheck =
array("moth"=>array("01"=>"Jan","02"=>"Feb","03"=>"Mar","04"=>"Apr","05"=>"May","06"=>"Jun","07"=>"July","08"=>"Aug","09"=>"sep","10"=>"Oct","11"=>"Nov","12"=>"Dec"));
return $mothcheck["moth"][$data];
}
function mothengfull($data){
$mothcheck =
array("moth"=>array("01"=>"January","02"=>"Febuary","03"=>"Mar","04"=>"April","05"=>"May","06"=>"June","07"=>"July","08"=>"August","09"=>"september","10"=>"October","11"=>"November","12"=>"December"));
return $mothcheck["moth"][$data];
}
function moththai($data){
$mothcheck =
array("moth"=>array("01"=>"มกราคม","02"=>"กุมภาพันธุ์","03"=>"มีนาคม","04"=>"เมษายน","05"=>"พฤษภาคม","06"=>"มิถุุนายน","07"=>"กรกฎาคม","08"=>"สิงหาคม","09"=>"กันยายน","10"=>"ตุลาคม","11"=>"พฤศจิกายน","12"=>"ธันวาคม"));
return $mothcheck["moth"][$data];
}
function moththaimini($data){
$mothcheck =
array("moth"=>array("01"=>"ม.ค.","02"=>"ก.พ.","03"=>"มี.ค","04"=>"เม.ย","05"=>"พ.ค.","06"=>"มิ.ย.","07"=>"ก.ค.",
"08"=>"ส.ค.","09"=>"ก.ย.","10"=>"ต.ค.","11"=>"พ.ย.","12"=>"ธ.ค."));
return $mothcheck["moth"][$data];
}
function datemoth($data,$check){
$data = explode("-",$data);
$day = $data[0];
$moth = $data[1];
if($check == "mini"){
$moth2 = $this->mothengmini($moth);
$year = $data[2];
}
else if($check == "full"){
$moth2 = $this->mothengfull($moth);
$year = $data[2];
}
else if($check == "thai"){
$moth2 = $this->moththai($moth);
$year = $data[2]+543;
}
else if($check == "thaimini"){
$moth2 = $this->moththaimini($moth);
$year = $data[2]+543;
}
return $day." ".$moth2." ".$year;
}
}
$fnc = new func();
//echo $fnc->datemoth("27-02-2014","thai")."<br>";
//echo $fnc->datemoth("27-02-2014","mini")."<br>";
//echo $fnc->datemoth("27-02-2014","full")."<br>";
//echo $fnc->datemoth("27-02-2014","thaimini")."<br>";
?>
</head>
<body>
<div class=Section2>
<table width="704" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<?php //ดึงข้อมูล ปี และ ไตรมาส จากค่า POST
$yearid = " SELECT *
FROM tbbudgetyear where
tbbudgetyear.BudgetyearID= ".$_POST['year']."";
$result=mysql_query($yearid);
while ($r=mysql_fetch_array($result))
{
$year =$r['Budgetyear'];
}
?>
<td width="291" align="center">รายงานการใช้งบประมาณแผ่นดิน ประจำปีงบประมาณ <?=$year; ?></td>
</tr>
<tr>
<td align="center"><span class="style1">มทร.ล้านนา ภาคพายัพ (จอมทอง)
</span></td>
</tr>
<tr>
<td align="center">มหาวิทยาลัยเทคโนโลยีราชมงคลล้านนา ภาคพายัพ เชียงใหม่</td>
</tr>
<?
$type = $_POST['type'];
$strSQL01 = "SELECT Budgettype
FROM tbbudgettype, tbbudgetyear, tbbudgetcategory
WHERE tbbudgetcategory.BudgettypeID = tbbudgettype.BudgettypeID
AND tbbudgetcategory.BudgetyearID = tbbudgetyear.BudgetyearID
AND tbbudgetcategory.BudgettypeID = ".$type."
";
$result01 = mysql_query($strSQL01);
while ($row_show01=mysql_fetch_array($result01))
{
?>
<tr>
<td height="43" align="center"><p>
<?=$row_show01['Budgettype']; ?>
</p></td>
</tr>
<?
}?>
</table>
<table width="1268" height="262" border="1" align="center">
<tr align="center">
<td width="47" rowspan="2">ลำดับ</td>
<td width="100" rowspan="2">ว.ด.ป</td>
<td width="104" rowspan="2">เลขที่เอกสาร</td>
<td width="102" rowspan="2">รายการ</td>
<td width="126" rowspan="2">งบที่ได้รับจัดสรร</td>
<td colspan="2">งบดำเนินงาน</td>
<td width="82" rowspan="2">ยอดคงเหลือ</td>
<td width="212" rowspan="2">ผู้รับผิดชอบคณะ/หน่วยงาน</td>
<td width="83" rowspan="2">หมายเหตุ</td>
</tr>
<tr>
<td width="81" align="center">ได้รับอนุมัติ</td>
<td width="100" align="center">จ่ายจริง</td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td align="center">ยอดยกมา</td>
<?
// ทำการดึงข้อมูล รายงานต่างๆ
$strSQL3 = "SELECT *
FROM tbbudgetcategory
WHERE BudgetyearID = ".$_POST['year']."
AND BudgettypeID = ".$_POST['type']."
";
$result3=mysql_query($strSQL3);
while ($row_show2=mysql_fetch_array($result3))
{
$rowbudget=$row_show2['Budgetcategoryamount'];
$rowbudget01=number_format("$rowbudget",2);
?>
<td align="right"><?=$rowbudget01;?></td>
<?php
}
?>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<?
$sql11 = "select * from tbbudgetyear where BudgetyearID = ".$_POST['year']." ";
$objQuery11 = mysql_query($sql11);
while($row11 = mysql_fetch_array($objQuery11))
{
$nest = $row11['Budgetyear'];
}
?>
<?
$qua=$_POST['quarter'];
$yeareng = $nest - 543 ;
$yeareng2 = $yeareng-1;
switch ($qua){
case 0:
echo"ต้องเลือกไตรมาสก่อน";
exit();
case 1:
$qua=" BETWEEN '$yeareng2-10-1' AND '$yeareng2-12-31' ";
break;
case 2:
$qua="BETWEEN '$yeareng-01-1' AND '$yeareng-03-31' ";
break;
case 3:
$qua="BETWEEN '$yeareng-04-1' AND '$yeareng-06-30' ";
break;
case 4:
$qua="BETWEEN '$yeareng-07-1' AND '$yeareng-09-30' ";
break;
}
// ทำการดึงข้อมูล รายงานต่างๆ
$type = $_POST['type'];
$strSQL = "SELECT Clearbilldate, Clearbillnumber, Clearbillname, Clearbillpay, Clearbillpayer, Clearbillchage, Clearbillnote, Budgetcategoryamount,Budgetyear
FROM tbclearbill, tbbudgettype, tbbudgetyear, tbbudgetcategory
WHERE tbclearbill.BudgettypeID = tbbudgettype.BudgettypeID
AND tbclearbill.BudgetyearID = tbbudgetyear.BudgetyearID
AND tbclearbill.BudgettypeID = tbbudgetcategory.BudgettypeID
AND tbclearbill.BudgettypeID = ".$type."
AND tbclearbill.Clearbilldate ".$qua."
";
$result=mysql_query($strSQL);
while ($row_show=mysql_fetch_array($result))
{
$dmy = date("d-m-Y", strtotime($row_show['Clearbilldate']) );
$ae = $fnc->datemoth("$dmy","thaimini"); // แปลง $row_show['Clearbilldate'] เป็น วันเดือนปีไทย
$rang = 1 ;
?>
<tr>
<td align="center"><?=$rang++; ?></td>
<td align="center"><?=$ae; ?></td>
<td align="center"><?=$row_show['Clearbillnumber']; ?></td>
<td align="left"><span class="style1">
<?=$row_show['Clearbillname']; ?>
</span></td>
<td> </td>
<?
$to = $row_show['Clearbillpay'] - $row_show['Clearbillpayer'];
?>
<td align="right"><?=number_format($row_show['Clearbillpay'],2); ?></td>
<td align="right"><?=number_format($row_show['Clearbillpayer'],2); ?></td>
<td align="right"><?=number_format($to,2); ?></td>
<td align="center"><?=$row_show['Clearbillchage']; ?></td>
<td align="center"><?=$row_show['Clearbillnote']; ?></td>
</tr>
<?php } ?>
<? $type = $_POST['type'];
$strSQL = "SELECT Clearbilldate, Clearbillnumber, Clearbillname, Clearbillpay, Clearbillpayer, Clearbillchage, Clearbillnote, Budgetcategoryamount,Budgetyear
FROM tbclearbill, tbbudgettype, tbbudgetyear, tbbudgetcategory
WHERE tbclearbill.BudgettypeID = tbbudgettype.BudgettypeID
AND tbclearbill.BudgetyearID = tbbudgetyear.BudgetyearID
AND tbclearbill.BudgettypeID = tbbudgetcategory.BudgettypeID
AND tbclearbill.BudgettypeID = ".$type."
AND tbclearbill.Clearbilldate ".$qua."
";
$result=mysql_query($strSQL);
while ($row_show= mysql_fetch_assoc ($result))
{
$total += $row_show['Clearbillpay'] ;
$total1 += $row_show['Clearbillpayer'] ;
}
?>
<tr>
<td colspan="5">รวม</td>
<td align="right"><?=$total;?></td>
<td align="right"><?=$total1;?></td>
<?
$strSQL4 = "SELECT *
FROM tbbudgetcategory
WHERE BudgetyearID = ".$_POST['year']."
AND BudgettypeID = ".$_POST['type']."
";
$result4=mysql_query($strSQL4);
while ($row_show4=mysql_fetch_array($result4))
{
$de = $row_show4['Budgetcategoryamount'] - $total1;
}
?>
<td align="right"><?=number_format($de,2);?> </td>
<td> </td>
<td> </td>
</tr>
</table>
</div>
</body>
</html>
ประวัติการแก้ไข 2014-08-10 11:57:15 2014-08-10 13:43:08
Date :
2014-08-10 11:56:51
By :
nest12345
x1. จากกระทู้ที่ https://www.thaicreate.com/php/forum/110541.html (คุณมีคำตอบแล้ว)
x2. และกระทู้นี้ (คุณมีคำตอบแล้ว)
จงเป็นผู้ให้ที่ดี และจงเป็นผู้รับที่ดี (สิ่งนี้คุณทำได้แล้วครับ จาก x1. และ x2. )
ผมมั่นใจว่าคุณจะเป็นโปรแกรมเมอร์ที่ดีได้ในอนาคตครับ
ในวันข้างหน้าถึงแม้ว่าคุณจะเติบโตแล้ว แต่
และโปรดอย่าลืมมันไปจากหัวใจ (ลูกชายของผม/หลานชายของผม) และจงหวลระลึกถึงมันเสมอ สิ่งที่ผมบ่นให้คุณฟังที่ #NO 9
ปล. ผมจะกลับมา บ่น Update กระทู้นี้อีกครั้งหนึ่ง อาจจะเป็น 1 วัน หรือ 1 เดือน หรือ 1 ปีในวันข้างหน้า ตามสัญญาครับ
Date :
2014-08-11 19:48:51
By :
หน้าฮี
มาตามสัญญาครับ โดยใช้ MySQL Workbench ในการทดสอบ (เหตุผลเดียวที่ใช้ MySQL Workbench คือของฟรี)
จากเดิมที่เคยอ้างอิงเอาไว้ดังนี้
Code (SQL)
-- SELECT (QUARTER('2013-10-01') % 4) + 1 AS Quarter -- ผลลัพธ์เท่ากับ Q1
-- SELECT (QUARTER('2014-09-30') % 4) + 1 AS Quarter -- ผลลัพธ์เท่ากับ Q4
หวังว่าคงเข้าใจตรงกัน ปีงบประมาณปัจจุบัน เท่ากับ 1Q ของปีที่ผ่านมา + 3Q ของปีปัจจุบัน (พ.ศ. 2557 = 2014)
Code (SQL)
SELECT
*
FROM
(SELECT
DATE_ADD(sd_date, INTERVAL (Quarter - 1) * 3 MONTH) AS StartDate,
DATE_ADD(DATE_ADD(sd_date, INTERVAL Quarter * 3 MONTH), INTERVAL - 1 DAY) AS EndDate,
Quarter
FROM
(SELECT DATE_ADD('2014-10-01', INTERVAL - 1 YEAR) AS sd_date) AS sd -- ย้อนหลัง 1 ปี (หา Q1 นั่นแหละครับ)
CROSS JOIN (SELECT 1 AS Quarter UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS Q) AS ThaiBudgetTable
ผลลัพธ์ในเบื้องต้น
และจะมาบ่นให้ฟังต่อถ้ามีโอกาสครับ
...
ปล. ฟังก์ชั่น SUM() ของฐานข้อมูล MSSQL Server > 2008R2 ประสิทธิภาพสูงกว่า MySQL มาก (คนละชั้นเลยครับ)
ไวยกรณ์
Code (SQL)
SELECT SUM(คอลัมภ์ที่ต้องการ) OVER (PARTITION BY คอลัมภ์ที่ต้องการ ORDER BY คอลัมภ์sที่ต้องการ) AS ColA,
SUM(คอลัมภ์ที่ต้องการ) OVER (PARTITION BY คอลัมภ์ที่ต้องการ ORDER BY คอลัมภ์sที่ต้องการ) AS ColB
FROM Tableที่ต้องการ
-- GROUP BY อิสระเสรีในตัวของมันเองครับ (PARTITION == GROUP BY นั่นแหละครับ (แจ๋วจริงฯ)
***** MSSQL Server 2008R2 SUM() OVER (PARTITION ได้แต่ ORDER BY ไม่ได้ครับ ) *****
ข้อมูลอ้างอิง : http://msdn.microsoft.com/en-us/library/ms189461%28v=sql.120%29.aspx
ประวัติการแก้ไข 2014-08-13 20:18:00 2014-08-13 23:00:06 2014-08-13 23:04:27 2014-08-13 23:06:29 2014-08-13 23:34:27 2014-08-14 00:23:22
Date :
2014-08-13 20:14:55
By :
หน้าฮี
ต่อจาก #NO 15
Code (SQL)
SELECT
((123456789) - (Q1 + Q2 + Q3 + Q4)) AS Balance, Q1, Q2, Q3, Q4
FROM
(SELECT
SUM(If((QUARTER(b.Clearbilldate ) % 4) + 1 = 1, b.Clearbillpay , 0)) AS Q1,
SUM(If((QUARTER(b.Clearbilldate ) % 4) + 1 = 2, b.Clearbillpay , 0)) AS Q2,
SUM(If((QUARTER(b.Clearbilldate ) % 4) + 1 = 3, b.Clearbillpay , 0)) AS Q3,
SUM(If((QUARTER(b.Clearbilldate ) % 4) + 1 = 4, b.Clearbillpay , 0)) AS Q4,
b.BudgettypeID
FROM
(SELECT
DATE_ADD(sd_date, INTERVAL (Quarter - 1) * 3 MONTH) AS StartDate,
DATE_ADD(DATE_ADD(sd_date, INTERVAL Quarter * 3 MONTH), INTERVAL - 1 DAY) AS EndDate,
Quarter
FROM
(SELECT DATE_ADD('2014-10-01', INTERVAL - 1 YEAR) AS sd_date) AS sd
CROSS JOIN (SELECT 1 AS Quarter UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS Q) AS ThaiBudgetTable
INNER JOIN tbclearbill AS b ON b.Clearbilldate BETWEEN StartDate AND EndDate
GROUP BY b.BudgettypeID
ORDER BY b.BudgettypeID, b.Clearbilldate) AS SemiFinal
-- RIGHT JOIN tbbudgetcategory AS c ON c.BudgettypeID = SemiFinal.BudgettypeID
ประวัติการแก้ไข 2014-08-14 00:13:33 2014-08-14 07:18:30
Date :
2014-08-14 00:08:27
By :
หน้าฮี
ต่อจาก #NO 15 อาจเป็นไปได้ว่าวันที่เริ่มต้นงบประมาณ อาจจะไม่ใช่วันที่ xxxx-10-01
สมมุติว่าเป็น วันที่ 2014-10-30 เป็นต้น (ปี-เดือน-วัน )
หลักการ "มันเลื่อนไปกี่วัน "
Code (SQL)
SUM(If((QUARTER(b.Clearbilldate + 29 ) % 4) + 1 = 1, b.Clearbillpay , 0)) AS Q1
หรือ
SUM(If((QUARTER(DATE_ADD(b.Clearbilldate, INTERVAL 29 DAY)) % 4) + 1 = 1, b.Clearbillpay , 0)) AS Q1
Code (SQL)
SELECT
c.BudgetAmount, ((123456789) - (Q1 + Q2 + Q3 + Q4)) AS Balance, Q1, Q2, Q3, Q4
FROM
(SELECT
SUM(If((QUARTER(b.Clearbilldate + 29) % 4) + 1 = 1, b.Clearbillpay , 0)) AS Q1,
SUM(If((QUARTER(b.Clearbilldate + 29) % 4) + 1 = 2, b.Clearbillpay , 0)) AS Q2,
SUM(If((QUARTER(b.Clearbilldate + 29) % 4) + 1 = 3, b.Clearbillpay , 0)) AS Q3,
SUM(If((QUARTER(b.Clearbilldate + 29) % 4) + 1 = 4, b.Clearbillpay , 0)) AS Q4,
b.BudgettypeID
FROM
(SELECT
DATE_ADD(sd_date, INTERVAL (Quarter - 1) * 3 MONTH) AS StartDate,
DATE_ADD(DATE_ADD(sd_date, INTERVAL Quarter * 3 MONTH), INTERVAL - 1 DAY) AS EndDate,
Quarter
FROM
(SELECT DATE_ADD('2014-10-30', INTERVAL - 1 YEAR) AS sd_date) AS sd
CROSS JOIN (SELECT 1 AS Quarter UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS Q) AS ThaiBudgetTable
INNER JOIN tbclearbill AS b ON b.Clearbilldate BETWEEN StartDate AND EndDate
GROUP BY b.BudgettypeID
ORDER BY b.BudgettypeID, b.Clearbilldate) AS SemiFinal
RIGHT JOIN tbbudgetcategory AS c ON c.BudgettypeID = SemiFinal.BudgettypeID
ปล. 1. ตรรกะยังเหมือนเดิมแต่สังเกตุว่า "วิธีคิดก็ไม่เปลี่ยนไป"
--- 2. ถ้าวันที่เริ่มต้นงบประมาณ ไม่ใช่ วันที่ xxxx-01-01 (สากล) มันจะคร่อมคาบเกี่ยวปีเสมอ
ประวัติการแก้ไข 2014-08-14 07:31:59 2014-08-14 07:36:02 2014-08-14 07:40:48 2014-08-14 07:45:13 2014-08-14 07:48:12
Date :
2014-08-14 07:27:44
By :
หน้าฮี
ต่อจาก #NO 17
คำว่า "มันจะคร่อมคาบเกี่ยวปีเสมอ" มันก็มีประเด็นสงสัยตามมาอีกว่า คร่อมปีแบบไหน เช่น
ปีก่อนหน้า-ปีปัจจุบัน หรือว่า
ปีปัจจุบัน-ปีหน้า
...
ตรรกะเหมือนเดิม แต่วิธีคิดเปลี่ยนไป?
หลักการ "เดินหน้าสองก้าว หรือว่า ถอยหลังสองก้าว" จะได้ระยะทางเท่ากันเสมอนั่นคือ 2 ก้าว
...
ประวัติการแก้ไข 2014-08-14 08:01:08
Date :
2014-08-14 07:58:39
By :
หน้าฮี
ข้อสงสัยประดับปัญญา "หนึ่งปีมี 12 เดือน" เพราะฉะนั้น
12 / 4 = ไตรมาส
12/ 6 = ครึ่งปี
12/2 = ?
หรือแต่ละช่วงเวลา มีจำนวนวันไม่แน่นอน
แล้วเราจะเขียน SQL Query ได้อย่างไร?
...
หลักการ "ทำตารางช่วงวันตามที่ต้องการ StartDate, EndDate, Issued"
ปล. หมอดูหมอเดายังทำนายทายทัก ชะตาชีวิต ของมนุษย์ได้แล้วนับประสาอะไรกับการเขียนโปรแกรม
ประวัติการแก้ไข 2014-08-14 08:15:01 2014-08-14 08:17:39 2014-08-14 08:19:04
Date :
2014-08-14 08:12:07
By :
หน้าฮี
โค้ดเป๊ะมากครับ
Date :
2014-08-14 09:23:05
By :
nest12345
Load balance : Server 02