บทความสอนเขียน PHP เบื้องต้น

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


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

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


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%

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


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