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

หลักการเขียน PHP Autocomplete ด้วย jQuery ในรูปแบบ JSON


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


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





วิธีแก้

       ให้เก็บฐานข้อมูลลูกค้าที่ต้องการทำ Autocomplete มาเป็นไฟล์ JSON พร้อมใช้งานไปเลย หรือเมื่อเข้ามายังหน้าแบบฟอร์มกรอกข้อมูล ให้ใช้ jQuery เรียกข้อมูลผ่าน Ajax เก็บไว้ในตัวแปร และใช้ Autocomplete ใน jQery UI ดึงมาแสดง ลองศึกษาตัวอย่างในส่วนของ Autocomplete แบบ categorise ดูนะครับ


* หมายเหตุ


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



2. เพิ่มการตรวจสอบเงื่อนไข num rows เพื่อตรวจสอบก่อนว่าข้อมูลที่ได้นั้น มีมากเกินไปหรือไม่ ตัวอย่าง

       กำหนดจำนวนรายการที่ใช้ฟังก์ชั่นนี้ได้ไว้ในไฟล์ config.php เพื่อจะได้เรียกใช้หลายๆหน้า
       
       define("MAX_ROWS_AUTOCOMPLETE", 1000);


       ในฟังก์ชั่นที่สร้างข้อมูล

if(mysql_num_rows($query) > MAX_ROWS_AUTOCOMPLETE){


//เริ่มสร้างข้อมูลให้อยู่ในรูปแบบ JSON


}


       ลองปรับใช้กันดูนะครับ ถ้าใช้ได้ถูกที่ถูกเวลา คิดว่าช่วยได้เยอะ




ตัวอย่างเหตุการณ์

บริษัทแห่งหนึ่ง มีพนักงานอยู่ 400 กว่าคน
พนักงานที่ใช้โปรแกรมพัฒนาจาก PHP ต่อวัน 20 คน


ทั้ง 20 คนนี้จะต้องคอยบันทึกข้อมูลต่างๆ ตลอดทั้งวัน


และเมื่อถึงแบบฟอร์มที่ต้องเลือก ชื่อพนักงานจะใช้ Autocomplete
เมื่อใช้งานพร้อมกัน 10 คน แต่ละคนค้นหาชื่อพนักงานด้วยอักษรอย่างน้อยคนละ 3 ตัวอักษร


โปรแกรมจะทำการค้นหารายชื่อพนักงานโดยส่งค่าผ่าน Ajax ไปยัง PHP เพื่อคิวรี่ข้อมูล มาแสดง


ดังนั้นผู้ใช้ 1 คนจะคิวรี่ 3 ครั้ง
ผู้ใช้ 10 คนก็จะคิวรี่รวม 30 ครั้ง


เฉลี่ยแต่ละวันจะเรียกแบบฟอร์มนี้ หรือฟังก์ชั่นนี้อยู่ 10 ครั้ง
ก็จะเท่ากับ 30 x 10 = 300 ครั้งที่ MySQL จะได้รับคำสั่งให้ค้นหาข้อมูลพนักงาน


ดังนั้น บางครั้งที่ผู้ใช้งานมากกว่า 20 ค้นค้นหารายชื่อพร้อมกัน และแต่ละคนก็พิมพ์มากกว่า 3 ตัวอักษร
ลองคิดดูว่าภายในไม่กี่วินาที MySQL ต้องค้นหาข้อมูลตามคำร้องขอของผู้ใช้กี่ครั้ง


แต่ถ้าเราสร้างข้อมูลทั้งหมดเก็บไว้ในรูปแบบไฟล์จาวาสคริปต์ล่ะ employee.js โดยเก็บเฉพาะข้อมูลที่ใช้สำหรับเรียกใช้งานผ่าน Autocomplete เท่านั้น และหน้าไหนที่จะต้องเรียกใช้รายชื่อพนักงานผ่านการค้นหาด้วยระบบ Autocomplete เราก็แค่แทรกคำสั่งดึงไฟล์จาวาสคริปต์ employee.js ไปไว้ในหน้านั้นด้วย



เพียงเท่านี้ก็ลดการทำงานของ MySQL ได้อย่างดีทีเดียวใช่ไหมล่ะครับ

ความคิดเห็น

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

แจกฟรี!! ระบบต่างๆที่พัฒนาด้วย 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 แต่ในที่นี้ต้องเป็นพาธให้ตรงกับโฟลเดอร์ใหม่ที่เราได้สร้างขึ้นด้วยนะครับ

PHP กับการคิดส่วนลดเป็นเปอร์เซ็น 5%, 10%, 20% ตามช่วงราคาที่กำหนด

<?php     $total_price = 1000;     $discount = 0;         if($total_price >= 500 && $total_price < 1001){         $discount = 5;     }elseif($total_price >= 1001 && $total_price <= 5000){         $discount = 10;     }elseif($total_price >= 5001){         $discount = 20;     }         $discount_bath = ($total_price*$discount)/100; ?> <pre> ซื้อสินค้าครบ 0 ถึง 499 บาท ไม่ได้ส่วนลด ซื้อสินค้าครบ 500 ถึง 1000 บาท ได้ส่วนลด 5% ซื้อสินค้าครบ 1001 ถึง 5000บาท ได้ส่วนลด 10% ซื้อสินค้าครบ 5001 บาทขึ้นไป ได้ส่วนลด 20% </pre> <h3>รวมราคาสินค้า = <?php echo number_format($total_price,2);?></h3> <h5>ส่วนลด = <?php echo $discount;?>%  (<?php echo $discount_bath;?> บาท)</h5> <h2>ราคาหลังส่วนลด = <?php echo number_format($total_price - $discount_bath,2);?>บาท</h2> "PHP ไม่ได้สร้างสุดยอดโปรแกรม แต่ PHP ช่วยให้งานคุณง่ายขึ้นต