|
|
|
PHP Mysql สอบถามการดึงให้เป็นไปตามรูปแบบฟอร์มนี้ (กำลังจะถึง due date) ขอบคุณมากค่ะ |
|
|
|
|
|
|
|
ยาวหน่อยนะคะ ช่วยดูหน่อยค่ะ
จากข้อมูลตัวอย่าง นี้คือโคดค่ะ
Code (PHP)
//โคดดึงข้อมูลจาก database
<?
include("mysql_connect.php");
$objDB = mysql_select_db("utilization_rate");
$strSQLmonth = "SELECT MonthId,month FROM month ORDER BY MonthId"; //select ข้อมูลสำหรับแสดงผลเป็นหัวตาราง
$objQuerymonth = mysql_query($strSQLmonth) or die ("Error Query [".$strSQLmonth."] " );
$item_id=array();
$item=array();
$i=0;
while ($objResultmonth = mysql_fetch_array($objQuerymonth))
{
$item_id[$i] = $objResultmonth['MonthId']; // เก็บ id สำหรับกำหนดเงื่อนไขในการวนลูปแนวกว้าง
$item[$i]=$objResultmonth['month']; //เก็บตัวแปร item สำหรับแสดงผลหัว column
$i++;
}
mysql_free_result($objQuerymonth); //
$strSQLrate= "SELECT DISTINCT (rate.AssetNo),description FROM rate RIGHT JOIN asset ON asset.AssetNo = rate.AssetNo ORDER BY rate.RateId";//select ข้อมูล AssetNo,description จากตาราง rate โดยมีการตรวจสอบกับตาราง asset ซึ่งเป็นการ lookup table
$objQueryrate = mysql_query($strSQLrate) or die ("Error Query [".$strSQLrate."] " );
$num_rows = mysql_num_rows($objQueryrate); //นับจำนวนแถวว่ามีข้อมูลหรือไม่
?>
<?
if($num_rows>0){ //ถ้ามีก็ให้แสดงผลตารางข้อมูล
?>
<table width="1000" cellpadding="1" cellspacing="1">
<tr bgcolor="#999999">
<td align="center"><strong>รายการ</strong></td>
<?
for($i=0;$i<count($item_id);$i++){
?>
<td align="center"><strong><?=$item[$i] //แสดงผลหัวคอลัมน์?></strong></td>
<?
}
?>
</tr>
<?
while ($objResultrate = mysql_fetch_array($objQueryrate)) { //วนลูปแสดงผลข้อมูลมิติที่ 1 ตามแนวตั้ง/แถว
?>
<tr bgcolor="#dcddc0">
<td align="left"> <?=$objResultrate['description'] //แสดงผลชื่อรายการ?></td>
<?
/*วนลูปแสดงผลข้อมูลมิติที่ 2 ตามแนวขวาง /คอลัมน์*/
for($i=0;$i<count($item_id);$i++){ //วนลูปให้เท่ากับจำนวน item,
$strSQLpercent = "SELECT percent FROM rate WHERE AssetNo={$objResultrate['AssetNo']} AND month='{$item[$i]}' AND year='2556'"; //วนลูปหาค่าในแต่ละเซลล์ของตารางตามค่าในคีย์หลักของแถว และคอลัมน์
$objQuerypercent = mysql_query($strSQLpercent) or die ("Error Query [".$strSQLpercent."] " );
$objResultpercent = mysql_fetch_array($objQuerypercent); //แน่ใจว่าในแต่ละเซลล์มีค่าเดียว จึงไม่ต้องวนลูป ทำ mysql_fecth_array เพราะถึงวนลูปค่าที่ได้ก็มีแค่ค่าเดียวเหมือนกัน
?>
<td align="center"><?=number_format($objResultpercent['percent'])?></td>
<?
mysql_free_result($objQuerypercent); //คืนค่าเมื่อไม่ได้ใช้แล้ว
}//end while
?>
<?
}
?>
<?
}
?>
</tr>
</table>
<!-------------------------------------->
//โคดสำหรับคำนวณตามไตรมาส
<?
$strSQLsum= "SELECT a.AssetNo, a.description,r.period1,r.period2,r.period3,r.period4
FROM asset a
LEFT JOIN
( SELECT AssetNo, SUM(IF(month IN('มกราคม', 'กุมภาพันธ์', 'มีนาคม') AND year='2556', `percent`, 0))/3 AS 'period1',
SUM(IF(month IN('เมษายน', 'พฤษภาคม', 'มิถุนายน') AND year='2556', `percent`, 0))/3 AS 'period2',
SUM(IF(month IN('กรกฎาคม', 'สิงหาคม', 'กันยายน') AND year='2556', `percent`, 0))/3 AS 'period3',
SUM(IF(month IN('ตุลาคม', 'พฤศจิกายน', 'ธันวาคม') AND year='2556', `percent`, 0))/3 AS 'period4'
FROM rate
GROUP by AssetNo
) r
ON r.AssetNo=a.AssetNo";
$objQuerysum = mysql_query($strSQLsum) or die ("Error Query [".$strSQLsum."] " );
?>
<table width="1000" cellpadding="1" cellspacing="1">
<tr bgcolor="#999999">
<th>Asset No</th>
<th>Description</th>
<th>ไตรมาสที่ 1</th>
<th>ไตรมาสที่ 2</th>
<th>ไตรมาสที่ 3</th>
<th>ไตรมาสที่ 4</th>
</tr>
<?
while ($objResultsum = mysql_fetch_array($objQuerysum))
{
?>
<tr bgcolor="#dcddc0">
<td><?=$objResultsum['AssetNo']?></td>
<td><?=$objResultsum['description']?></td>
<td><?=$objResultsum['period1']?></td>
<td><?=$objResultsum['period2']?></td>
<td><?=$objResultsum['period3']?></td>
<td><?=$objResultsum['period4']?></td>
</tr>
<?
}
?>
</table>
รายงานที่ดึงมาหน้า web
แต่หนูต้องการให้ รายงาน เป็นตามแบบฟอร์มนี้ค่ะ
หนูจะแทรกผล sum ไตรมาส ในทุกๆ สามเดือน ตามแบบฟอร์มได้อย่างไร ขอแนวคิดค่ะ
ขอบคุณมากๆ ค่ะ จะถึง due date แล้ว
Tag : PHP, MySQL
|
ประวัติการแก้ไข 2013-05-21 11:41:01
|
|
|
|
|
Date :
2013-05-21 10:18:22 |
By :
shushu |
View :
1691 |
Reply :
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอนนี้ติดตรงไหนครับ
|
|
|
|
|
Date :
2013-05-22 06:22:37 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คิออยากให้ตารางมันรวมกันนะค่ะ
ตามแบบฟอร์มอะค่ะ
|
|
|
|
|
Date :
2013-05-22 08:15:39 |
By :
shushu |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เพิ่ม SUM ของแต่ละเดือนครับ
SELECT `year_id`,
SUM(IF(MONTH(`date_pay`) = '01', `amount`, 0)) AS 'Jan',
SUM(IF(MONTH(`date_pay`) = '02', `amount`, 0)) AS 'Feb',
SUM(IF(MONTH(`date_pay`) = '03', `amount`, 0)) AS 'Mar',
SUM(IF(MONTH(`date_pay`) IN('01', '02', '03'), `amount`, 0)) AS 'period1',
SUM(IF(MONTH(`date_pay`) = '04', `amount`, 0)) AS 'Apr',
SUM(IF(MONTH(`date_pay`) = '05', `amount`, 0)) AS 'May',
SUM(IF(MONTH(`date_pay`) = '06', `amount`, 0)) AS 'Jun',
SUM(IF(MONTH(`date_pay`) IN('04', '05', '06'), `amount`, 0)) AS 'period2',
SUM(IF(MONTH(`date_pay`) = '07', `amount`, 0)) AS 'Jul',
SUM(IF(MONTH(`date_pay`) = '08', `amount`, 0)) AS 'Aug',
SUM(IF(MONTH(`date_pay`) = '09', `amount`, 0)) AS 'Sep',
SUM(IF(MONTH(`date_pay`) IN('07', '08', '09'), `amount`, 0)) AS 'period3',
SUM(IF(MONTH(`date_pay`) = '10', `amount`, 0)) AS 'Oct',
SUM(IF(MONTH(`date_pay`) = '11', `amount`, 0)) AS 'Nov',
SUM(IF(MONTH(`date_pay`) = '12', `amount`, 0)) AS 'Dec',
SUM(IF(MONTH(`date_pay`) IN('10', '11', '12'), `amount`, 0)) AS 'period4'
FROM `main_inventory_pay`
GROUP by year_id
ที่จริงค่า 4 บรรทัดนี้ไม่จำเป็นต้องคำนวณในคำสั่ง SQL ก็ได้
Code (SQL)
SUM(IF(MONTH(`date_pay`) IN('01', '02', '03'), `amount`, 0)) AS 'period1',
SUM(IF(MONTH(`date_pay`) IN('04', '05', '06'), `amount`, 0)) AS 'period2',
SUM(IF(MONTH(`date_pay`) IN('07', '08', '09'), `amount`, 0)) AS 'period3',
SUM(IF(MONTH(`date_pay`) IN('10', '11', '12'), `amount`, 0)) AS 'period4'
ตอนลูปออกมาแสดงก็เพียงแต่นำค่า
Jan + Feb + Mar = Period1
Apr + May + Jun = Period2
Jul + Aug + Sep = Period3
Oct + Nov + Dec = Period4
การหาเปอร์เซ็น (%) ของแต่ละ Period ก็นำมาคูณ 100 หาร 3
Period1_Percent = (Period1 * 100) / จำนวนเต็ม
Period2_Percent = (Period2 * 100) / จำนวนเต็ม
Period3_Percent = (Period3 * 100) / จำนวนเต็ม
Period4_Percent = (Period4 * 100) / จำนวนเต็ม
|
|
|
|
|
Date :
2013-05-22 08:54:43 |
By :
Naizan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เพิ่มโคด sum ไปในช่วงนี้ไหมค่ะ
Code (PHP)
<?
/*วนลูปแสดงผลข้อมูลมิติที่ 2 ตามแนวขวาง /คอลัมน์*/
for($i=0;$i<count($item_id);$i++){ //วนลูปให้เท่ากับจำนวน item,
$strSQLpercent = "SELECT percent FROM rate WHERE AssetNo={$objResultrate['AssetNo']} AND month='{$item[$i]}' AND year='2556'"; //วนลูปหาค่าในแต่ละเซลล์ของตารางตามค่าในคีย์หลักของแถว และคอลัมน์
$objQuerypercent = mysql_query($strSQLpercent) or die ("Error Query [".$strSQLpercent."] " );
$objResultpercent = mysql_fetch_array($objQuerypercent); //แน่ใจว่าในแต่ละเซลล์มีค่าเดียว จึงไม่ต้องวนลูป ทำ mysql_fecth_array เพราะถึงวนลูปค่าที่ได้ก็มีแค่ค่าเดียวเหมือนกัน
?>
ขอบคุณมากกกค่ะ
|
|
|
|
|
Date :
2013-05-22 09:25:31 |
By :
shushu |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|