|
|
|
เขียน PHP + MySQL ให้ลูปยังไงให้เรียงลำดับตามเงื่อนไขที่ต้องการครับ สามารถทำได้ไหม |
|
|
|
|
|
|
|
group ก่อน ค่อยๆหาของเก่ามี ตย.เยอะ
|
|
|
|
|
Date :
2017-09-20 16:42:52 |
By :
apisitp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คล้ายๆ การจ่ายเงินในระบบ mlm ที่ไหนซักแห่ง เป็นการจ่ายต่อรอบ ถ้าซื้อของครบในรอบก็จ่าย
จ้างทำไหมครับอันนี้ เชื่อว่าเป็น mlm แน่นอน
จังหวัด แทนลูกค้า
รายการ คือสินค้าที่ซื้อ
|
|
|
|
|
Date :
2017-09-20 17:04:31 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าทำเพื่อจัดซื้อ ลำดับความสำคัญอยู่ที่งบประมาณเหรอครับ
ไม่ได้อยู่ที่ความจำเป็นในการใช้วัสดุเหรอครับ เช่นของนี้หมดแล้วจำเป็นต้องใช้ให้ความสำคัญก่อน
ส่วนวิธีการ ใช้ group ไม่ได้ ต้องใช้ order by จังหวัด รายการ
แล้วใช้โค๊ด php ในการรวม
ปล. condition ที่ใช้ตรวจสอบเยอะพอสมควร ต้องวาง อัลกอลิธึม ให้ดี
|
ประวัติการแก้ไข 2017-09-20 17:30:44
|
|
|
|
Date :
2017-09-20 17:27:45 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองๆ วาดๆใส่ กระดาษ ดูก่อน และ ออก แบบ DB ไว้เลย
แล้ว ก็ลอง Group by ดู by อะไรก็ได้ไปก่อน
แล้ว ถ้าหาก ต้องการ ลบกับยอด คงเหลือ ก็
while กำหนด $B= $row1[""] - $row[""] ;
และ ค่อย ส่งค่าที่ได้ ไป update อีกตารางอื่นๆ
|
|
|
|
|
Date :
2017-09-20 17:29:42 |
By :
Hararock |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
<?php
session_start();
////////////////////////////////
$con=new mysqli('localhost','user','paswd','dbname');
if($con->errno)die($con->connect_error);
//////////////////////////////
/// สร้างตารางเก็บค่า record ที่ทำงานไปแล้ว
$rs=$con->query('select 1 from round_status');
if($con->errno){
$con->multi_query("
# ตารางคิวแก้ไขให้ถูกต้องด้วยครับ เป็นการเพิ่ม field ไว้ตรวจสอบ
ALTER TABLE `que_list`
ADD `status` int(10) UNSIGNED NOT NULL;
#ตารางเก็บข้อมูลจังหวัดที่ทำงานแล้วต่อรอบ ป้องกัน server/client หยุดการทำงานโดยไม่ตั้งใจ
CREATE TABLE `round_status` (
`id` int(10) UNSIGNED NOT NULL,
`section_time` datetime NOT NULL,
`prov` varchar(60) NOT NULL,
`amt` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `round_status`
ADD PRIMARY KEY (`id`),
ADD KEY `section_time` (`section_time`,`prov`);
ALTER TABLE `round_status`
MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
");
}
//////////////////////////////
/// function สำหรับ insert ตาราง round_status
function add_status($con, $sectimt, $prov, $amt ){
$con->query('insert into round_status .......');
}
//////////////////////////////
// กำหนด section_time ไว้ตรวจสอบ
$sectime=isset($_SESSION['sectime'])? $_SESSION['sectime'] :
$_SESSION['sectime']=time();
//////////////////////////////
// query รายการทั้งหมด ที่ยังไม่จัดสรรงบประมาณ
$sql = "
select id, province, product, amount from que_list as q
where status=0 and not exists(
select 1 from round_status
where prov=q.province and section_time='$sectime'
)
order by province, product, id
";
$rs=$con->query($sql) or die($con->error . '<br>' . $sql);
do{
if($rs->num_rows==0){
//// เคลียร์ session เมื่อทำงานเสร็จ
unset $_SESSION['sectime'];
echo 'Complete'; break;
}else{
$sum_amt=0; $old_prov='';
while($ro=$rs->fetch_assoc()){
if($old_prov!==$ro->province){
if($sum_amt>0){
add_status($con, $sectime, $old_prov, $sum_amt);
} $sum_amt=0; $old_prov=$ro->province;
}
if($sum_amt<50){
$sum_amt+=$ro->amt;
$con->query('update que_list set status=1 where id='.$ro->id);
if($sum_amt>=50){
add_status($con, $sectime, $old_prov, $sum_amt);
}
}
}
if($sum_amt<50){
add_status($con, $sectime, $old_prov, $sum_amt);
}
}
$rs=$con->query($sql) or die($con->error . '<br>' . $sql);
}
ตัวอย่างข้างบนมีข้อจำกัด
1 ทำงานหลายเครื่อง พร้อมกันไม่ได้
2 ถ้า server|client ตายเดี้ยง ยังจัด event ไม่ครบ
3 function add_status ยังไม่สมบูรณ์
ที่เหลือคิดเอาเองบ้างนะครับ แค่พอจะเป็นตัวอย่างให้ต่อยอดได้บ้าง
|
|
|
|
|
Date :
2017-09-21 09:44:07 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|