|
|
|
รบกวนช่วยดูรายงานสรุปประจำวันทีครับ ,มีปัญหาด้านการ join ตารางหรือต้องแก้ไขอย่างไรรบกวนชี้แนะครับ |
|
|
|
|
|
|
|
จากตาราง
buy_ticket
book_ticket
rent_mask
และผลลัพธ์ที่ออกแบบ
ผมต้องการทำรยางานประจำวันโดย amount ของสองตาราง buy กับ book มารวมกัน และ Goup ตามวันที่ มาแสดงในตารางยอดจากการขายตั๋๋ว
และต้องการผมรวมของแต่ละวันจาก amount_mask โดย group ตามวันเช่นกัน มาแสดงหลังตาราง ยอดจากการเช่าหน้ากากดำน้ำ และfine_rent_mask โชว์หลังช่องค่าปรับ แล้วทั้งหมดเข้าในรายวัน
*****ซึ่งตอนนี้ผมทำได้แค่ดึงจากตารางเดียวคือ buy เข้าใจว่าต้อง join ตารางนั้นไม่มีความสัมพันธ์กันเลย ลอง join แล้ว ON ด้วย Date แต่ออกมาแค่วันเดียว มีแนวทางการทำหรือต้องแก้ไขตารางอย่างไรครับ จากโคต๊
Code (PHP)
<?php require_once('Connections/koh_samaesan2.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 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>Untitled Document</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>
<br>
<br>
<br>
<div style="margin:auto;width:80%;">
<br>
<br>
<table class="table table-bordered table-condensed" style="width:550px;">
<thead>
<tr class="bg-success">
<th>Date</th>
<th>Product</th>
<th>Price</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();
$q="
SELECT
SUM(buy_ticket.amount) AS totalAmount,
DATE(buy_ticket.date_buy) AS datadate
FROM
buy_ticket
GROUP BY
datadate
ORDER BY
datadate DESC
";
$rs=mysql_query($q);
$total=$rs->num_rows;
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>
<td><?=array_sum($data_price[$dateKeyCheck])?></td>
</tr>
<tr class="bg-info">
<td class="text-right">รวมสะสม</td>
<td></td>
<td><?=array_sum($aggre_price)?></td>
</tr>
<?php } ?>
<tr>
<td>
<?php if($data_show==1){?>
<?=$data['datadate']?>
<?php } ?>
</td>
<td>ยอดจากการขายตั๋ว</td>
<td><?=$data['totalAmount']?></td>
</tr>
<tr>
<td></td>
<td>ยอดจากการเช่าหน้ากากดำน้ำ</td>
<td></td>
</tr>
<tr>
<td></td>
<td>ยอดจากค่าปรับ</td>
<td></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>
<td><?=array_sum($data_price[$dateKeyCheck])?></td>
</tr>
<tr class="bg-info">
<td class="text-right">รวมสะสม</td>
<td></td>
<td><?=array_sum($aggre_price)?></td>
</tr>
<?php } ?>
<?php $i++; } ?>
</tbody>
</table>
</div>
</body>
</html>
Tag : PHP, MySQL
|
ประวัติการแก้ไข 2015-09-23 18:40:58
|
|
|
|
|
Date :
2015-09-23 18:40:01 |
By :
chayathorn108 |
View :
1437 |
Reply :
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าคิวรี่ 2 ครั้ง ต้องมาจัด array ตามวันที่ใหม่
ลองคิวรี่ ครั้งเดียว 2 ตาราง ครับ
Code (SQL)
select * from (
select dte, descript, amount from a
union all
select dte, descript, amount from b
) as tmp order by dte desc
|
|
|
|
|
Date :
2015-09-24 08:33:53 |
By :
NewbiePHP |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|