รบกวนช่วยสร้างการเลือกเดือนปีเพื่อแสดงข้อมูลอย่างง่ายให้หน่อยครับ
จาก code นี้ครับ
Code (PHP)
<?php require_once('Connections/koh_samaesan2.php');
require('/include/Paginator.php');
$objConnect = mysql_connect("localhost","root","") or die("ไม่สามารถเชื่อมต่อฐานข้อมูลได้");
$objDB = mysql_select_db("koh_samaesan2") or die("ไม่สามารถใช้งานฐานข้อมูลได้");
mysql_query("set names 'utf8'");
?>
<?php
session_start();
error_reporting( error_reporting() & ~E_NOTICE );
if(empty($_SESSION["ID_emp"])){
header("Refresh: 0; url=login.html");
}
$ID_emp = $_SESSION["ID_emp"];
$first_name = $_SESSION["first_name"];
$last_name = $_SESSION["last_name"];
$nameposition = $_SESSION["nameposition"];
$idposition = $_SESSION["idposition"];
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>รายงานสรุปประจำวัน</title>
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css">
<link href="bootstrap/css/subdropdown.css" rel="stylesheet" type="text/css">
<!-- Optional theme -->
<link rel="stylesheet" href="bootstrap/css/bootstrap-theme.min.css">
<!-- Latest compiled and minified JavaScript -->
<script src="bootstrap/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="bootstrap/css/styles.css">
<style type="text/css">
body,td,th {
font-size: 14px;
text-align: center;
}
</style>
<style type="text/css">
<!--
.paginate {
font-family: Arial, Helvetica, sans-serif;
font-size: .7em;
}
a.paginate {
border: 1px solid #000080;
padding: 2px 6px 2px 6px;
text-decoration: none;
color: #000080;
}
h2 {
font-size: 12pt;
color: #003366;
}
h2 {
line-height: 1.2em;
letter-spacing:-1px;
margin: 0;
padding: 0;
text-align: left;
}
a.paginate:hover {
background-color: #000080;
color: #FFF;
text-decoration: underline;
}
a.current {
border: 1px solid #000080;
font: bold .7em Arial,Helvetica,sans-serif;
padding: 2px 6px 2px 6px;
cursor: default;
background:#000080;
color: #FFF;
text-decoration: none;
}
span.inactive {
border: 1px solid #999;
font-family: Arial, Helvetica, sans-serif;
font-size: .7em;
padding: 2px 6px 2px 6px;
color: #999;
cursor: default;
}
-->
</style>
</head>
<body>
<?php
if ($idposition == 2){
require('/navbar/emp2nav.php');
}
else if ($idposition == 3){
require('/navbar/emp3nav.php');
}
else{
require('/navbar/emp1nav.php');
}
?>
<!-------------------------------navigation bar---------------------------------->
<div class="container" align="left" >
<div class="panel panel-default">
<div class="panel-body ">
<div class="line" >
<table width="100%" border="0">
<tr>
<td width="100%" align="center" valign="middle"><img src="Image/" width="180" height="85"></td>
</tr>
</table>
</div>
<br>
<table class="table table-bordered table-condensed" align="center" valign="middle" style="width:550px;">
<thead>
<tr class="bg-success">
<th>วันที่</th>
<th>รายละเอียด</th>
<th>จำนวนเงิน</th>
</tr>
</thead>
<tbody>
<?php
// ส่วนของการกำนหดแสดงการแบ่ง ส่วนของข้อมูลของวันที่ที่ต่างกัน
$temp_data1=null;
$temp_data2=null;
$data_show=1; // 1 แสดง 0 ไม่แสดง
// กำหนดสำหรับอ้างอิง key ของตัวแปร
$i=1;
// ส่วนกำหนดตัวแปร สำหรับเก็บค่าวันที่ และเปรียบเทียบ
$arr_dateCheck=array();
// ส่วนกำหนดตัวแปรสำหรับเก็บค่าข้อมูลสะสมในแต่ละ คอลัมน์ที่ต้องการ กำหนดเป็น array
$aggre_price=array();
$aggre_com=array();
// ส่วนกำหนดตัวแปรสำหรับเก็บค่าข้อมูลในแต่ละ คอลัมน์ที่ต้องการ กำหนดเป็น array
$data_price=array();
$data_com=array();
//ส่วนกำหนดตัวแปรจัดการแบ่งหน้า
$Per_Page =100; // Per Page
$Page = $_GET["Page"];
$Page_Start = (($Per_Page*$Page)-$Per_Page);
$q="
select * from (
select DATE_FORMAT(date_buy,'%Y-%m') as datadate,descript, Sum(amount) AS totalAmount from buy_ticket
WHERE date_buy LIKE '2015-09%' GROUP BY datadate
union all
select DATE_FORMAT(date_book,'%Y-%m') as datadate,descript , Sum(amount) from book_ticket
WHERE status_book='ยืนยันแล้ว' AND date_book LIKE '2015-09%' GROUP BY datadate
union all
select DATE_FORMAT(date_time,'%Y-%m') as datadate,descript , Sum(amount_mask) from rent_mask
WHERE date_time LIKE '2015-09%' GROUP BY datadate
) as tmp
order by datadate asc
";
$rs=mysql_query($q);
//$total=$rs->num_rows;
$total = mysql_num_rows($rs);
if(!$_GET["Page"])
{
$Page=1;
}
$Prev_Page = $Page-1;
$Next_Page = $Page+1;
if($total<=$Per_Page)
{
$Num_Pages =1;
}
else if(($i % $Per_Page)==0)
{
$Num_Pages =($total/$Per_Page) ;
}
else
{
$Num_Pages =($total/$Per_Page)+1;
$Num_Pages = (int)$Num_Pages;
}
$q .=" LIMIT $Page_Start , $Per_Page";
$rs = mysql_query($q);
while($data=mysql_fetch_assoc($rs)){
$show_row_end=0; // เริ่มต้นการแบ่ง กำหนดเป็น 0
// จัดรูปแบบ key วันที่ที่จะใช้เก็บข้อมูล (หากไม่ได้ใช้วันที่ ประยุกต์เป็นอย่างอื่นตามต้องการ)
$dateKey=date("dmY",strtotime($data['datadate']));
/// ส่วนของการกำนหด การเปรียบค่าของรายการ เพื่อแบ่งวันที่เป็นสัดส่วน
$temp_data1=$data['datadate'];
if($temp_data2==null){
$temp_data2=$temp_data1;
$data_show=1;
}else{
if($temp_data1==$temp_data2){
$data_show=0;
$temp_data2=$temp_data1;
}else{
$temp_data2=$temp_data1;
$data_show=1;
}
}
// เก็บค่าวันที่ของรายการข้อมูลไว้ในตัวแปร สำหรับเปรียบเทียบ
$arr_dateCheck[$i]=$data['datadate'];
// ถ้าไม่ใช้ข้อมูลรายการแรก และ ข้อมูลวันที่รายการก่อนหน้า ไม่เท่ากับรายการที่กำลังแสดง
// นั่นหมายถึงจุดที่เราจะกำหนดว่า เป็นรายการสุดท้ายของวันที่หนึ่งๆ
if($i>1 && $arr_dateCheck[$i-1]!=$data['datadate']){
// กำหนด key วันที่ที่จะเช็ค
$dateKeyCheck=date("dmY",strtotime($arr_dateCheck[$i-1]));
$show_row_end=1; // ให้แสดง หรือแทรกแถวที่ต้องการได้
}
// ส่วนของการเก็บข้อมูลไว้ใน array เพื่อใช้งานผลรวม
if(!isset($data_price[$dateKey])){ // ถ้าไม่มีตัวแปร
$data_price[$dateKey]=array(); // ให้กำหนด
array_push($data_price[$dateKey],$data['totalAmount']); // และเพิ่มค่า
}else{
array_push($data_price[$dateKey],$data['totalAmount']); // เพิ่มค่าใน array
}
?>
<?php
// แทรกแถวที่ต้องการกรณีปกติ กรณีนี้ รายการสุดท้ายจะไม่ขึ้น เราจะเพิ่มการแทรกไว้ด้านหลัง
// ของข้อมูลแทน
if($show_row_end==1){?>
<?php
// รวมค่าข้อมูลแต่ละวัน แล้วเพิ่มเข้าไปใน array รายการค่าสะสม
array_push($aggre_price,array_sum($data_price[$dateKeyCheck]));
?>
<tr class="bg-warning">
<td class="text-right">รวมรายวัน</td>
<td></td>
<th><?=array_sum($data_price[$dateKeyCheck])?> บ.</th>
</tr>
<?php } ?>
<tr>
<td>
<?php if($data_show==1){?>
<?=$data['datadate']?>
<?php } ?>
</td>
<td><?=$data['descript']?></td>
<td><?=$data['totalAmount']?> บ.</td>
</tr>
<?php if(
// สำหรับแทรก กรณีเป็นรายการสุดท้ายในตาราง
$i==$total){?>
<?php
// รายการสุดท้าย กำหนด key เช็คเป็นค่าที่รูปแบบตรงกัน
$dateKeyCheck=date("dmY",strtotime($data['datadate']));
// รวมค่าข้อมูลแต่ละวัน แล้วเพิ่มเข้าไปใน array รายการค่าสะสม
array_push($aggre_price,array_sum($data_price[$dateKeyCheck]));
?>
<tr class="bg-warning">
<td class="text-right">รวมรายวัน</td>
<td></td>
<th><?=array_sum($data_price[$dateKeyCheck])?> บ.</th>
</tr>
<?php } ?>
<?php $i++; } ?>
</tbody>
</table>
Total <?php echo $total;?> Record
<?php
$pages = new Paginator;
$pages->items_total = $total;
$pages->mid_range = 10;
$pages->current_page = $Page;
$pages->default_ipp = $Per_Page;
$pages->url_next = $_SERVER["PHP_SELF"]."?QueryString=value&Page=";
$pages->paginate();
echo $pages->display_pages()
?>
</div>
</div>
</div>
<script src="bootstrap/js/jquery.min.js"></script>
<script src="bootstrap/js/bootstrap.min.js"></script>
</body>
</html>
จากตรง LIKE '2015-09%' จะให้รับค่าจาก textfield หรือ selec พอกดปุ่ม แล้วก็แสดง redcord
ผลหน้าตาข้อมูลออกมาแบบนี้ครับ
รบกวนทีครับ ขอบคุณครับTag : PHP, MySQL
Date :
2015-09-27 01:36:39
By :
chayathorn108
View :
1023
Reply :
6
Code
13 $ID_emp = $_SESSION["ID_emp"];
$first_name = $_SESSION["first_name"];
$last_name = $_SESSION["last_name"];
$nameposition = $_SESSION["nameposition"];
$idposition = $_SESSION["idposition"];
$date_search = isset($_POST['dateKeyword'])? $_POST['dateKeyword'] : ''; // format YYYY-MM
if( !preg_match('/^\d{4}-\d{2}$/',date_search) ) exit( 'กรณี format ไม่ตรง โดน hack จะให้ทำอะไร');
$q="
select * from (
SELECT LEFT(date_buy, 7) datadate, descript, Sum(amount) AS totalAmount from buy_ticket
WHERE LEFT(date_buy,7)='$date_search '
UNION ALL
SELECT LEFT(date_book, 7), descript , Sum(amount) FROM book_ticket
WHERE status_book='ยืนยันแล้ว' AND LEFT(date_book, 7)='$date_search '
UNION ALL
SELECT LEFT(date_time, 7), descript , Sum(amount_mask) FROM rent_mask
WHERE LEFT(date_time, 7)='$date_search '
) as tmp
order by datadate
";
ปล.
จากโค๊ดตัวอย่าง เป็นการสรุป ตามวันที่ ของทุกรายการ
ถ้าต้องการ แยก descript ต้อง group by descript ด้วย
ที่จขกท group by datedata ไม่จำเป็น เพราะมี where clause วันที่ คลุมไว้แล้ว
ประวัติการแก้ไข 2015-09-27 12:59:33
Date :
2015-09-27 12:55:08
By :
NewbiePHP
ตอบความคิดเห็นที่ : 3 เขียนโดย : NewbiePHP เมื่อวันที่ 2015-09-27 12:55:08
รายละเอียดของการตอบ ::
ขอบคุณท่าน NewbiePHP มากครับ
ในหน้าฟอร์มก็ประมารนี้ใช่ไหมครับ
Code (PHP)
<form action="reportDoc.php" method="post">
<td colspan="6" align="center">ค้นหา :
<input name="dateKeyword" id='dateKeyword' type="text" value="" />
<input type="submit" name="Submit" value="ค้นหา" />
</td>
</form>
ส่วน
Code (PHP)
Code (SQL)
$q="
select * from (
SELECT LEFT(date_buy, 7) datadate, descript, Sum(amount) AS totalAmount from buy_ticket
WHERE LEFT(date_buy,7)='$date_search'
UNION ALL
SELECT LEFT(date_book, 7), descript , Sum(amount) FROM book_ticket
WHERE status_book='ยืนยันแล้ว' AND LEFT(date_book, 7)='$date_search'
UNION ALL
SELECT LEFT(date_time, 7), descript , Sum(amount_mask) FROM rent_mask
WHERE LEFT(date_time, 7)='$date_search'
) as tmp
order by datadate
";
ขอถามเป็นความรู้นิดนึงครับ LEFT(date_buy, 7) datadate คำสั่งนี้คือยังไงครับแล้ว 7 คืออะไรหรอครับ
Date :
2015-09-27 19:11:40
By :
chayathorn108
อ่านค่าด้านซ้าย 7 ตัวอักษร LEFT('YYYY-MM-DD', 7) = 'YYYY-MM'
ประวัติการแก้ไข 2015-09-27 20:54:04
Date :
2015-09-27 20:53:40
By :
NewbiePHP
Load balance : Server 01