ขอสอบถามการ select ไตรมาสครับ คือว่ามีอาการ error เมื่อคิวรี่ แปลประมาณว่า หาชื่อเล่นให้ตารางหน่อย!!! อะครับ (ทำได้ละครับในที่สุดมันก็มีวันนี้)
จากโค้ดครับผมต้องการ select ในรูป ครับ แต่โค้ดมัน error ครับว่า
Code (SQL)
#1248 - Every derived table must have its own alias
ช่วยหน่อยนะครับ ผมติดแค่ตรงนี้จริงๆ T^T
Code (SQL)
SELECT tbbudgetcategory.BudgettypeID, tbbudgettype.Budgettype,tbbudgetcategory.Budgetcategoryamount เงินต้น,tbbudgetcategory.t1,tbbudgetcategory.t2,tbbudgetcategory.t3,tbbudgetcategory.t4
FROM tbbudgetcategory,tbbudgettype
LEFT JOIN
(
SELECT Clearbilldate,
SUM(Clearbilldate BETWEEN '2012-10-1' AND '2013-12-30') AS 't1',
SUM(Clearbilldate BETWEEN '2013-01-1' AND '2013-03-30') AS 't2',
SUM(Clearbilldate BETWEEN '2013-04-1' AND '2013-06-30') AS 't3',
SUM(Clearbilldate BETWEEN '2013-07-1' AND '2013-09-30') AS 't4'
FROM tbclearbill
GROUP by Clearbilldate)
ON tbbudgetcategory.BudgettypeID = tbclearbill.BudgettypeID,tbbudgetcategory.BudgettypeID = tbbudgettype.BudgettypeID
GROUP by tbbudgetcategory.BudgettypeID , tbbudgettype.Budgettype
แนวคิดโค้ดผมเอามาจากกระทู้นี้ครับ https://www.thaicreate.com/php/forum/095484.html
ผมอยาก select ให้ได้แบบตารางข้างล่างอะครับ ไตรมาสไหนยังไม่มีข้อมูลก็ แสดงค่า เป็น 0 ไว้ก่อน
Tag : PHP, MySQL, HTML/CSS, Ajax, iReport
ประวัติการแก้ไข 2014-08-10 23:40:54 2014-08-10 23:51:19 2014-08-11 00:07:43 2014-08-11 00:08:21 2014-08-11 07:46:46 2014-08-11 08:21:29 2014-08-11 08:22:55 2014-08-11 08:24:11 2014-08-11 08:27:19 2014-08-11 20:16:39
Date :
2014-08-10 23:40:03
By :
nest12345
View :
1743
Reply :
10
เอาฐานข้อมูล + ข้อมูลมาแปะไว้ด้วยก็ดีนะครับ เผื่อพี่ๆ น้อง ๆ เขาจะได้ทดสอบด้วย
เขียนมาแบบนั้น ใครใคร่รู้ ๆ ไปครับว่าตัวแปรที่เราตั้งคืออะไร
อันนี้คือ ติ เพื่อก่อ นะครับ.
ว่าแต่ว่า .. กระทู้ที่แล้ว ยังไม่ได้เหรอครับ.
Date :
2014-08-11 07:50:47
By :
deawx
Code (SQL)
SELECT tbbudgetcategory.BudgettypeID
, tbbudgettype.Budgettype
, tbbudgetcategory.Budgetcategoryamount เงินต้น
, tbbudgetcategory.t1 # t1 t2 t3 t4 ไม่ได้อยู่ใน tbbudgetcategory อ้างแบบนี้ผิดครับ
, tbbudgetcategory.t2 # มันเกิดจากการสร้าง temporary query ซึ่งเป็นเสมือนอีก table 1
, tbbudgetcategory.t3 # ต้องไปกำหนดชื่อ alias หลัง วงเล็ปสุดท้ายของการ ทำ temporay query
, tbbudgetcategory.t4 # แล้วชื่อ tbgudgetcategory ให้เปลี่ยนเป็นชื่อ alias ที่ตั้งขึ้นมา ในกรณีตัวอย่าง คือ temp
FROM tbbudgetcategory,tbbudgettype
LEFT JOIN
(
SELECT Clearbilldate,
SUM(Clearbilldate BETWEEN '2012-10-1' AND '2013-12-30') AS 't1', # sum type date ไม่ได้นะครับ ต้องเป็นชนิดตัวเลข
SUM(Clearbilldate BETWEEN '2013-01-1' AND '2013-03-30') AS 't2', # แล้ว alias ช่ื่อ field ไม่ต้องใส่ quote ครอบ
SUM(Clearbilldate BETWEEN '2013-04-1' AND '2013-06-30') AS 't3',
SUM(Clearbilldate BETWEEN '2013-07-1' AND '2013-09-30') AS 't4'
FROM tbclearbill
GROUP by Clearbilldate # group by วันที่ ผิดวัตถุประสงค์หรือเปล่า ลองดูความต้องการก่อนครับ และ ลองคิดถึงผลลัพธ์ที่เกิดขึ้นด้วย
) as temp # สร้าง alias temporary query ตรงนี้ครับ
ON tbbudgetcategory.BudgettypeID = tbclearbill.BudgettypeID,tbbudgetcategory.BudgettypeID = tbbudgettype.BudgettypeID # on clause คล้ายคำสั่ง where ใช้ คอมม่า ไม่ได้ ต้องใช้ and หรือ or
GROUP by tbbudgetcategory.BudgettypeID , tbbudgettype.Budgettype
ตัวอย่าง การ sum แบบมีเงื่อนไข
SUM( Clearbillpay * ( Clearbilldate BETWEEN '2013-07-1' AND '2013-09-30') ) AS t4
อธิบาย
( Clearbilpay BETWEEN '2013-07-1' AND '2013-09-30') ถ้าเป็นจริงจะได้ค่า 1 เป็นเท็จ จะได้ค่า 0
10 * true = 10 = (10 * 1)
10 * false = 0 = (10 * 0);
สรุป ผิดหลายที่เกิน F ชัวร์ 55555
Date :
2014-08-11 11:20:01
By :
Chaidhanan
OK ให้คุณ Chaidhanan ช่วยแทนละกัน
เพราะผม Query รูปไม่ได้ ในฐานข้อมูล.
Date :
2014-08-11 14:23:55
By :
deawx
ตอบความคิดเห็นที่ : 3 เขียนโดย : Chaidhanan เมื่อวันที่ 2014-08-11 11:20:01
รายละเอียดของการตอบ ::
ขอบคุณจริงๆนะครับ ในที่สุดก็สามารถ Select ตามเงื่อนไข ได้ครบและถูกต้องครับ
ในที่สุด โปรเจคระบบแรกของผมก็เสร็จแล้วครับ T^T
ผมต้องรีบไปทำอีกโปรเจค พอดี ได้ทำ 2 ระบบครับ DSS งบประมาณ กับ DSS ประเมินภาพรวม
Code (SQL)
SELECT tbclearbill.BudgettypeID,tbbudgettype.Budgettype AS หมวดหมู่, tbbudgetcategory.Budgetcategoryamount AS เงินต้น,
tbbudgetcategory.Budgetcategoryamount
-
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '2012-10-1' AND '2013-12-31') )
-
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '2013-1-1' AND '2013-3-31') )
-
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '2013-4-1' AND '2013-6-31') )
-
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '2013-07-1' AND '2013-09-30')) AS เงินคงเหลือ,
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '2012-10-1' AND '2013-12-31') ) AS ไตรมาส1,
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '2013-1-1' AND '2013-3-31') ) AS ไตรมาส2,
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '2013-4-1' AND '2013-6-31') ) AS ไตรมาส3,
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '2013-07-1' AND '2013-09-30') ) AS ไตรมาส4
FROM tbclearbill,tbbudgetcategory,tbbudgettype,tbbudgetyear
where tbbudgetcategory.BudgettypeID = tbclearbill.BudgettypeID AND tbbudgetcategory.BudgettypeID = tbbudgettype.BudgettypeID AND
tbclearbill.BudgetyearID = tbbudgetcategory.BudgetyearID AND tbclearbill.BudgetyearID = 41
GROUP by tbclearbill.BudgettypeID
ประวัติการแก้ไข 2014-08-11 16:57:30 2014-08-11 16:58:35 2014-08-11 17:00:10
Date :
2014-08-11 16:57:03
By :
nest12345
Code (PHP)
<?php
// ae.php
$year=isset($_REQUEST['targetYear'])? $_REQUEST['targetYear'] : date('Y') + (date('m')>9? 1 : 0);
$year_o=$year-1;
$qr="select a.TypeID, a.Budget, (a.Budget-a.pay1-a.pay2-a.pay3-a.pay4) Balance, a.pay1, a.pay2, a.pay3, a.pay4
from (
select c.BudgettypeID TypeID
, c.Budgetcategoryamount Budget
, sum(b.Clearbillpay * (b.Clearbilldate between '{$year_o}-10-01' and '{$year_o}-12-31') ) pay1
, sum(b.Clearbillpay * (b.Clearbilldate between '{$year}-01-01' and '{$year}-03-31') ) pay2
, sum(b.Clearbillpay * (b.Clearbilldate between '{$year}-04-01' and '{$year}-06-30') ) pay3
, sum(b.Clearbillpay * (b.Clearbilldate between '{$year}-07-01' and '{$year}-09-30') ) pay4
from tbclearbill b
left join tbbudgetcategory c on c.BudgettypeID=b.BudgettypeID
group by c.BudgettypeID
) as a";
$mysql=new mysqli('localhost', 'test', 'test', 'test');
$rs=$mysql->query($qr); $old_typeID='';
$row=array(); $tr=''; $idx=-1;
while($ro=$rs->fetch_assoc() ){
$tr .= "<tr><td>$ro[TypeID]</td><td>$ro[Budget]</td><td>$ro[Balance]</td>".
"<td>$ro[pay1]</td><td>$ro[pay2]</td><td>$ro[pay3]</td><td>$ro[pay4]</td></tr>";
}
?><!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" />
<style>
body {
margin: 0px;
padding: 0px;
}
</style>
</head>
<body>
<table border="2" cellpadding="2" cellspacing="2">
<tr><th rowspan="2">ID</th><th rowspan="2">งบโครงการ</th><th rowspan="2">คงเหลือ</th><th colspan="4">ไตรมาส</th></tr>
<tr><th>1</th><th>2</th><th>3</th><th>4</th></tr>
<?php echo $tr; ?>
</table>
</body>
</html>
ทำเสร็จตั้งแต่เมื่อเช้า แต่ไม่อยากบอก อยากให้ลองคิดเองก่อน
ประวัติการแก้ไข 2014-08-11 17:10:25
Date :
2014-08-11 17:09:02
By :
Chaidhanan
ต้องลองแกะที่ละส่วนครับ
การอ่านโค๊ดคนอื่นมันยากอยู่ครับ ต้องทำความเข้าใจไปที่ละส่วน
Date :
2014-08-11 17:15:13
By :
Chaidhanan
โค้ดทั้งหมดนะครับ เผื่อท่านใดสนใจนะครับ
เป็น การออกรายงาน ใน รูปแบบ doc แนวนอนนะครับ และการเลือกข้อมูลแบบไตรมาส
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>
</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'];
$year1 = $year - 1 ;
}
?>
<td width="291" align="center">รายงานการใช้งบประมาณแผ่นดิน ประจำปีงบประมาณ <?=$year; ?> (ต.ค.<?=$year1; ?>-ก.ย.<?=$year; ?>)</td>
</tr>
<tr>
<td align="center"><span class="style1">มทร.ล้านนา ภาคพายัพ (จอมทอง)
</span></td>
</tr>
<tr>
<td height="49" align="center">มหาวิทยาลัยเทคโนโลยีราชมงคลล้านนา ภาคพายัพ เชียงใหม่</td>
</tr>
</table>
<table width="1141" height="262" border="1" align="center">
<tr align="center">
<td width="62">ลำดับ</td>
<td width="169">งบประมาณประจำปี
<?=$year; ?></td>
<td width="120">งบที่ได้รับจัดสรร</td>
<td width="158">เงินคงเหลือในปัจจุบัน</td>
<td width="163">ไตรมาสที่ 1</td>
<td width="77">ไตรมาสที่ 2</td>
<td width="77">ไตรมาสที่ 3</td>
<td width="106">ไตรมาสที่ 4</td>
<td width="151">หมายเหตุ</td>
</tr>
<?
$sql11 = "select * from tbbudgetyear where BudgetyearID = ".$_POST['year']." ";
$objQuery11 = mysql_query($sql11);
while($row11 = mysql_fetch_array($objQuery11))
{
$nest = $row11['Budgetyear'];
}
?>
<?
$yeareng = $nest - 543 ;
$yeareng2 = $yeareng-1;
$qr="SELECT tbclearbill.BudgettypeID,tbbudgettype.Budgettype AS cat, tbbudgetcategory.Budgetcategoryamount AS ton,
tbbudgetcategory.Budgetcategoryamount
-
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '$yeareng2-10-1' AND '$yeareng2-12-31') )
-
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '$yeareng-01-1' AND '$yeareng-03-31') )
-
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '$yeareng-04-1' AND '$yeareng-06-30') )
-
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '$yeareng-07-1' AND '$yeareng2-09-30')) AS de,
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '$yeareng2-10-1' AND '$yeareng2-12-31' )) AS t1,
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '$yeareng-01-1' AND '$yeareng-03-31' )) AS t2,
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '$yeareng-04-1' AND '$yeareng-06-30' )) AS t3,
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '$yeareng-07-1' AND '$yeareng-09-30' )) AS t4
FROM tbclearbill,tbbudgetcategory,tbbudgettype,tbbudgetyear
where tbbudgetcategory.BudgettypeID = tbclearbill.BudgettypeID AND tbbudgetcategory.BudgettypeID = tbbudgettype.BudgettypeID AND
tbclearbill.BudgetyearID = tbbudgetcategory.BudgetyearID AND tbclearbill.BudgetyearID = ".$_POST['year']."
GROUP by tbclearbill.BudgettypeID";
$qr1 = mysql_query($qr);
$i = 1;
while($rerow = mysql_fetch_array($qr1))
{
?>
<tr>
<td align="center"><?=$i;?></td>
<td align="left"><?=$rerow['cat'];?></td>
<td align="right"><?=number_format($rerow['ton'],2); ?></td>
<td align="right"><?=number_format($rerow['de'],2); ?></td>
<td align="right"><?=number_format($rerow['t1'],2); ?></td>
<td align="right"><?=number_format($rerow['t2'],2); ?></td>
<td align="right"><?=number_format($rerow['t3'],2); ?></td>
<td align="right"><?=number_format($rerow['t4'],2); ?></td>
<td align="center"></td>
</tr>
<? $i++; } ?>
<?
$sql11 = "select * from tbbudgetyear where BudgetyearID = ".$_POST['year']." ";
$objQuery11 = mysql_query($sql11);
while($row11 = mysql_fetch_array($objQuery11))
{
$nest = $row11['Budgetyear'];
}
?>
<?
$yeareng = $nest - 543 ;
$yeareng2 = $yeareng-1;
$qr="SELECT tbclearbill.BudgettypeID,tbbudgettype.Budgettype AS cat, tbbudgetcategory.Budgetcategoryamount AS ton,
tbbudgetcategory.Budgetcategoryamount
-
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '$yeareng2-10-1' AND '$yeareng2-12-31') )
-
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '$yeareng-01-1' AND '$yeareng-03-31') )
-
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '$yeareng-04-1' AND '$yeareng-06-30') )
-
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '$yeareng-07-1' AND '$yeareng2-09-30')) AS de,
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '$yeareng2-10-1' AND '$yeareng2-12-31' )) AS t1,
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '$yeareng-01-1' AND '$yeareng-03-31' )) AS t2,
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '$yeareng-04-1' AND '$yeareng-06-30' )) AS t3,
SUM( Clearbillpayer * ( Clearbilldate BETWEEN '$yeareng-07-1' AND '$yeareng-09-30' )) AS t4
FROM tbclearbill,tbbudgetcategory,tbbudgettype,tbbudgetyear
where tbbudgetcategory.BudgettypeID = tbclearbill.BudgettypeID AND tbbudgetcategory.BudgettypeID = tbbudgettype.BudgettypeID AND
tbclearbill.BudgetyearID = tbbudgetcategory.BudgetyearID AND tbclearbill.BudgetyearID = ".$_POST['year']."
GROUP by tbclearbill.BudgettypeID";
$qr1 = mysql_query($qr);
while($rerow = mysql_fetch_array($qr1))
{
$total += $rerow['ton'] ;
$total1 += $rerow['de'] ;
$total2 += $rerow['t1'] ;
$total3 += $rerow['t2'] ;
$total4 += $rerow['t3'] ;
$total5 += $rerow['t4'] ;
}
?>
<tr>
<td> </td>
<td align="center">รวม</td>
<td align="right"><?=number_format($total,2); ?>s</td>
<td align="right"><?=number_format($total1,2); ?></td>
<td align="right"><?=number_format($total2,2); ?></td>
<td align="right"><?=number_format($total3,2); ?></td>
<td align="right"><?=number_format($total4,2); ?></td>
<td align="right"><?=number_format($total5,2); ?></td>
<td> </td>
</tr>
</table>
</div>
</body>
</html>
ประวัติการแก้ไข 2014-08-11 17:47:43
Date :
2014-08-11 17:32:52
By :
nest12345
Load balance : Server 03