บทความที่เรียบเรียงใหม่



13 มี.ค. 2556

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



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

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

PHP คืออะไร โครงสร้างภาษา PHP
PHP กับการกำหนดตัวแปร (Variable) PHP กับเงื่อนไขการตัดสินใจ (if..else)
ข้อมูลชนิดอาร์เรย์ (Array) PHP กับการทำซ้ำ (Loop)


การรับตัวแปรจากแบบฟอร์ม

การเชื่อมต่อฐานข้อมูล MySQL