ข้ามไปที่เนื้อหาหลัก

การเขียนโปรแกรมเพื่อดึงรายงานมาแสดงผล ต้องระวังเรื่องวันที่ให้ดี



การดึงรายงาน บางครั้งต้องกำหนดเงื่อนไขวันที่ให้รัดกุม และแยกแยะรายละเอียดให้ชัดเจนว่ารายงานไหน เป็นรายงานไหน และข้อกำหนดของรายงานนั้นมีเงื่อนไขอะไรบ้าง ไม่เช่นนั้นแล้วรายงานอาจจะแสดงผลผิดพลาดได้ เหมือนกรณีที่ผมเจอมากับตัวเอง ^^”

ตัวอย่างข้อมูลที่จะใช้ดึงรายงาน
การตลาดออกไปติดต่อลูกค้าที่ต้องการมาลงโฆษณากับนิตยสารฉบับหนึ่ง ในเดือน มกราคม พ.ศ. 2556 ซึ่งมีผู้ประกอบการหลายรายที่สนใจลงโฆษณาในนิตยสาร โดยมีรายงานดังนี้


วันที่ 05/01/2556      
1. ร้าน สวยบิ้วตี้ & ซาลอน       
2. ร้าน ทนดีคอมพิวเตอร์ 

วันที่ 11/01/2556      
1. บริษัท สนุกทัวร์ จำกัด 


วันที่ 16/01/2556      
1. บริษัท ขายทุกอย่าง จำกัด       
2. บริษัท ก่อสร้างอลังการ จำกัด




สามารถเก็บค่าลงโฆษณาได้แล้ว 3 ราย ส่วนอีก 2 รายจะขอจ่ายในเดือนถัดไปซึ่งเป็นเดือน กุมภาพันธ์ ก่อนที่นิตยสารจะตีพิมพ์ และในเดือนกุมภาพันธ์ ก็มีลูกค้าสนใจเพิ่มอีก 3 ราย ซึ่งมีรายชื่อดังต่อไปนี้

วันที่ 11/02/2556
1.    ร้าน ข้าวมันไก่รสเลิศ
2.    ร้าน ผลิตภัณฑ์บำรุงผิว

วันที่ 18/02/2556
1.    หจก. ส่งออกเสื้อผ้า


นิตยสารฉบับนี้จะส่งพิมพ์สิ้นเดือนกุมภาพันธ์นี้ และสามารถเก็บค่าลงโฆษณาได้ครบตามจำนวนเรียบร้อย ซึ่งตัวอย่างฐานข้อมูลทั้งหมด ที่ได้มีดังนี้

ข้อมูลที่ต้องการจะเก็บเป็น 2 ตาราง คือ 

1. ข้อมูลลูกค้าที่ตกลงโฆษณา (tb_opportunity)

opp_id date วันที่สนใจ  cus_name ชื่อลูกค้า emp_name พนักงานที่ติดต่อ
105/01/2556 ร้าน สวยบิ้วตี้ & ซาลอน        นายมุ่งมั่น ตั้งใจ
2 05/01/2556  ร้าน ทนดีคอมพิวเตอร์  นายมุ่งมั่น ตั้งใจ
3 11/01/2556 บริษัท สนุกทัวร์ จำกัด  นางสาวจงรัก ภักดี
4 16/01/2556 บริษัท ขายทุกอย่าง จำกัด     นางสาวจงรัก ภักดี
5 16/01/2556 บริษัท ก่อสร้างอลังการ จำกัด นายมุ่งมั่น ตั้งใจ
6 11/02/2556 ร้าน ข้าวมันไก่รสเลิศ นางสาวจงรัก ภักดี
7 12/02/2556 ร้าน ผลิตภัณฑ์บำรุงผิว นายมุ่งมั่น ตั้งใจ
8 18/02/2556 หจก. ส่งออกเสื้อผ้า นางสาวจงรัก ภักดี


2. ข้อมูลลูกค้าที่จ่ายค่าโฆษณา (tb_payment)


pay_idpay_date วันที่ชำระเงินcus_name ชื่อลูกค้าemp_name พนักงานที่บันทึกข้อมูลopp_id_ref
822/01/2556ร้าน สวยบิ้วตี้ & ซาลอน       นางสาวบัญชี อยู่ดี1
1119/01/2556 ร้าน ทนดีคอมพิวเตอร์ นางสาวบัญชี อยู่ดี2
1227/01/2556บริษัท สนุกทัวร์ จำกัด นางสาวบัญชี อยู่ดี3
1520/02/2556บริษัท ขายทุกอย่าง จำกัด    นางสาวบัญชี อยู่ดี4
2419/02/2556บริษัท ก่อสร้างอลังการ จำกัดนางสาวบัญชี อยู่ดี5
2719/02/2556ร้าน ข้าวมันไก่รสเลิศนางสาวจงรัก ภักดี6
2823/02/2556ร้าน ผลิตภัณฑ์บำรุงผิวนางสาวจงรัก ภักดี7
3027/02/2556หจก. ส่งออกเสื้อผ้านางสาวจงรัก ภักดี8


* วันที่ในฐานข้อมูลจะเก็บในรูปแบบ ค.ศ. เช่น 2013-01-25

จากข้อมูลถ้าเราต้องการหาลูกค้าที่สนใจลงโฆษณาในเดือนมกราคม จะได้อยู่ 5 ราย

<?php

$sql = "SELECT * FROM tb_opportunity WHERE date BETWEEN '2013-01-01' AND '2013-01-31' ";

//Query code..


?>


และถ้าเราค้นหารายการที่สนใจในเดือน มกราคม ที่ชำระค่าโฆษณาแล้ว ก็จะได้ 5 รายการ
เพราะลูกค้าที่สนใจลงโฆษณาได้ชำระเงินครบถ้วนแล้ว

<?php
$sql = "SELECT * FROM tb_opportunity ";
$sql .= "INNER JOIN tb_payment ON tb_payment.opp_id = tb_payment .opp_id_ref";
$sql .= "WHERE tb_opportunity.date BETWEEN '2013-01-01' AND '2013-01-31' ";

//Query code..


?>


แต่ถ้ากรณีดูข้อมูลย้อนหลัง ที่ไม่ใช่ข้อมูลปัจจุบัน มีจุดหนึ่งที่เราจะต้องระวังก็คือ เรื่องวันที่ของข้อมูล

เช่น ดูข้อมูลเปอร์เซ็นการเรียกเก็บเงินช่วงเดือน มกราคม ว่าสามารถเก็บได้ครบหรือเปล่า คิดเป็นกี่เปอร์เซ็นต์ที่ยังเรียกเก็บไม่ได้ เมื่อเรียกข้อมูลออกมา ข้อมูลการสนใจลงโฆษณาที่ชำระเงินแล้ว จะต้องได้แค่ 3 รายเท่านั้น เพราะเงื่อนไขคือต้องการเฉพาะที่เรียกเก็บเงินได้ในเดือนนั้น


<?php
$sql = "SELECT * FROM tb_opportunity ";
$sql .= "INNER JOIN tb_payment ON tb_payment.opp_id = tb_payment .opp_id_ref";
$sql .= "WHERE tb_opportunity.date BETWEEN '2013-01-01' AND '2013-01-31' ";
$sql .= "AND tb_payment.pay_date  BETWEEN '2013-01-01' AND '2013-01-31' ";

//Query code..

?>

จากโค๊ดตัวอย่าง คือเราจะต้องเพิ่มเงื่อนไข WHERE เข้าไปอีก เพื่อดึงเอาเฉพาะลูกค้าที่สนใจลงโฆษณาในเดือนมกราคม และได้จ่ายเงินในเดือนมกราคมเท่านั้น

สนใจ = 5

เก็บได้ = 3
ค้างชำระ = 2 (เพราะเป็นลูกค้าที่ชำระในเดือนถัดไป)

เปอร์เซ็นต์การเรียกเก็บจะได้เท่ากับ (3*100) / 5  = 60%

เราอาจจะหารายงานสรุปเปอร์เซ็นต์การค้างชำระประจำเดือน หรือประจำปี ของลูกค้าแต่ละรายได้
ว่ารายไหนที่มียอดค้างชำระบ่อย ค้างไว้นาน จะได้ใส่ใจเป็นพิเศษ ^^"


สำหรับโค๊ดที่นำมาเป็นตัวอย่างนั้น อาจเป็นเพียงแนวทางในการคิดเงื่อนไขการดึงรายงานเท่านั้น หากใครที่สามารถปรับแต่งให้ทำงานได้เร็วกว่า ก็อย่าลืมนำมาแบ่งปันเทคนิคที่ใช้กันบ้างนะครับ





PHP CI MANIA PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
ราคาสุดคุ้ม  
http://www.phpcodemania.com

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

แจกฟรี!! ระบบต่างๆที่พัฒนาด้วย PHP สำหรับนำไปใช้ในงานต่างๆ

       สำหรับหลายท่านที่ขอโค้ดเข้ามาทาง Inbox ของเฟซบุ๊กแฟนเพจ หรือถามถึงระบบต่างๆหลังไมค์มานั้น ส่วนใหญ่ก็มีแจกอยู่แล้วในเว็บบอร์ด ThaiCreate.Com นะครับ และด้านล่างนี้ก็เป็นระบบต่างๆที่แจกให้นำไปลองใช้ลองศึกษากันครับ

สอนเขียน PHP แสดงการจองห้องประชุมแบบไฮไลท์ตามช่วงเวลา (แบบเชื่อมต่อฐานข้อมูล MySQL)

ตัวอย่าง ผลลัพธ์ที่ได้จากการจองในฐานข้อมูล ตาราง tb_room สร้างตารางรายชื่อห้องประชุม สำหรับ id นั้นเป็น Primarykey จะกำหนดให้สร้างอัตโนมัติ ทุกครั้งที่เราเพิ่มชื่อห้องประชุมใหม่ -- -- Database: `tobedev_example` -- -- -------------------------------------------------------- -- -- Table structure for table `tb_room` -- CREATE TABLE IF NOT EXISTS `tb_room` (   `id` int(11) NOT NULL,   `name` varchar(30) NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- -- Dumping data for table `tb_room` -- INSERT INTO `tb_room` (`id`, `name`) VALUES (1, 'ห้องประชุม 1'), (2, 'ห้องประชุม 2'), (3, 'ห้องประชุม 3'), (4, 'ห้องประชุม 4'), (5, 'ห้องประชุม 5'); -- -- Indexes for dumped tables -- -- -- Indexes for table `tb_room` -- ALTER TABLE `tb_room`   ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `tb_room` -- ALTER TABLE `tb_room`   MODIFY `i...

การดึงข้อมูล MySQL มาแสดงในปฏิทิน Fullcalendar ด้วย PHP

หลักการทำงาน เรียกข้อมูลจากตาราง tb_event ด้วยฟังก์ชั่นของ MySQLi ข้อมูลจากฐานข้อมูลจะถูกวนลูปเก็บไว้ใน $data และจะถูกส่งไปที่ Fullcalendar ด้วยการแปลงข้อมูลจาก PHP ให้อยู่ในรูปแบบ JSON อาร์เรย์ด้วยฟังก์ชั่น json_encode() PHP Code <?php //Database $data = array(); $link = mysqli_connect("127.0.0.1", "tobedev", "1234", "tobedev_example"); mysqli_set_charset($link, 'utf8'); if (!$link) {     echo "Error: Unable to connect to MySQL." . PHP_EOL;     echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;     echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;     exit; } $query = "SELECT * FROM tb_event"; if ($result = $link->query($query)) {     /* fetch object array */     while ($obj = $result->fetch_object()) {        $data[] = array(                 ...