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

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



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

ตัวอย่างข้อมูลที่จะใช้ดึงรายงาน
การตลาดออกไปติดต่อลูกค้าที่ต้องการมาลงโฆษณากับนิตยสารฉบับหนึ่ง ในเดือน มกราคม พ.ศ. 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 นะครับ และด้านล่างนี้ก็เป็นระบบต่างๆที่แจกให้นำไปลองใช้ลองศึกษากันครับ

สร้างแบบฟอร์มล็อกอิน HTML + PHP

       ผมจะสร้างระบบตัวอย่างเพื่อแสดงให้เห็นการทำงานของสคริปต์ PHP ที่ใช้ในการล็อกอินอย่างง่ายๆ นะครับ โดยที่ผมจะสร้างโฟลเดอร์ใหม่ขึ้นในไดร์ฟที่เราได้กำหนดให้เป็น Directory Root สำหรับรันสคริปต์ PHP ซึ่งผมกำหนดเอาไว้ที่ D:\www ดังนั้นผมจะสร้างโฟลเดอร์ teacher_assistant ขึ้นมาใหม่จะได้พาธเป็น D:\www\teacher_assistant สำหรับการเข้าถึง จะใช้ URL ดังนี้ http://localhost/teacher_assistant หลังจากสร้างโฟลเดอร์เสร็จเรียบร้อยก็จะเริ่มกระบวนการเตรียมโครงสร้างโปรเจ็กต์ด้วยเครื่องมือช่วยเขียนโปรแกรมชื่อว่า eclipse ซึ่งดูวิธีการสร้างโปรเจ็กต์ได้จากบทความ เริ่มต้นสร้างโปรเจ็กต์ ด้วยโปรแกรม eclipse เครื่องมือเขียนโปรแกรม php ในบทความเป็นการสร้างโปรเจ็กต์ที่มีพาธเป็นโฟลเดอร์ login แต่ในที่นี้ต้องเป็นพาธให้ตรงกับโฟลเดอร์ใหม่ที่เราได้สร้างขึ้นด้วยนะครับ

การดึงข้อมูล 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(                     'id' => $obj->id,                     'title'=> $obj->titl