อรุณสวัสดิ์ยามเช้าครับผม อากาศยามเช้าวันนี้แจ่มใสดีนะครับ นอนตื่นเช้าทำให้สมองปลอดโปร่งจริงๆ วันนี้ผมเลยนำเทคนิคการเขียนโค้ดเว็บมาบอกต่อครับ … ไม่รู้ว่าจะมีคนสังเกตหรือเปล่าว่า เวลาทำเว็บแล้วดึงข้อมูลมาแสดง ถ้าเป็นข้อมูลภาษาไทย มันจะมีปัญหาเวลาจัดเรียงครับ เพราะแทนที่มันจะเรียงตามพจนานุกรม มันกลับเรียงแบบแปลกๆ เช่น กา ขา อา เก เข เอ แบบนี้หนะครับ (ในความจริงมันควรจะเป็น กา เก ขา เข อา เอ) ปัญหานี้ไม่ได้มีเฉพาะภาษาไทยนะครับ มันเป็นกับพวกตัวอักษร Non-latin อื่นๆด้วย
สาเหตุที่ทำให้การจัดเรียงไม่เป็นไปตามพจนานุกรมแบบที่เราคุ้นเคยนั่นก็เป็นเพราะว่า เราจัดเก็บข้อมูลแบบ UTF-8 ซึ่งการจัดเก็บข้อมูลแบบนี้จะพิจารณาสระด้วยครับ ต่างจากเว็บแบบเก่าๆที่เราจะจัดเก็บแบบ TIS620 เพราะถ้าเป็น TIS620 มันพิจารณาเฉพาะตัวอักษรครับ แต่จะทำยังไงดีละ? ในเมื่อฐานข้อมูลเราจัดเก็บแบบ UTF-8 ไปแล้ว (และผมก็แนะนำให้จัดเก็บแบบ UTF-8 ต่อไปครับ เพราะมันเป็นการเก็บข้อมูลแบบสากลแล้ว) ดังนั้น วิธีการแก้ปัญหาก็คือ เมื่อเอามาแสดงผลเราก็ “แปลง” ชุดตัวอักษร จาก UTF-8 ให้เป็น TIS 620 ครับ โดยใช้คำสั่ง CONVERT แค่นี้การเรียงลำดับก็จะเป็นไปตามพจนานุกรมแล้วครับ
ส่วนวิธีการดึงข้อมูลสำหรับคนที่ทำเว็บด้วย WordPress นั้นให้ดูตามภาพประกอบนะครับ ว่ามีการเขียนโค้ดอย่างไร และในโค้ดนี้ผมยังเพิ่มเทคนิคการจัดกลุ่มข้อมูลที่มาแสดงด้วยครับ เช่น ต้องการแสดงข้อมูลเซ็ต จ-ฉ เท่านั้น ก็ลองดูโค้ดแล้วพิจารณาตามนะครับ
<?php $querystr = " SELECT $wpdb->posts.* FROM $wpdb->posts, $wpdb->postmeta WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = 'position' AND $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'teacher' ORDER BY CONVERT($wpdb->posts.post_title USING tis620) ASC "; $pageposts = $wpdb->get_results($querystr, OBJECT); ?>
ส่วนโค้ดตัวนี้เอาไว้แสดงข้อมูลเป็นช่วงข้อมูลครับ เช่นต้องการแสดงข้อมูล ก-จ | ช-ท อะไรทำนองนี้ มันก็มีปัญหาอีกนั่นแหล่ะครับ เพราะว่าภาษาไทยดันมีบางคำที่มีการใช้สระนำหน้า เราจึงต้องเพิ่มเงื่อนไขในการดึงข้อมูลอีก โดยใช้คำสั่งตามตัวอย่างด้านล่างครับ
<?php $querystr = " SELECT $wpdb->posts.* FROM $wpdb->posts, $wpdb->postmeta WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = 'position' AND $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'teacher' AND ($wpdb->posts.post_title like '_ก%' and Left($wpdb->posts.post_title,1) in ('เ','แ','โ','ไ','ใ') OR $wpdb->posts.post_title like 'ก%' OR $wpdb->posts.post_title like '_ข%' and Left($wpdb->posts.post_title,1) in ('เ','แ','โ','ไ','ใ') OR $wpdb->posts.post_title like 'ข%' OR $wpdb->posts.post_title like '_ค%' and Left($wpdb->posts.post_title,1) in ('เ','แ','โ','ไ','ใ') OR $wpdb->posts.post_title like 'ค%' OR $wpdb->posts.post_title like '_ฆ%' and Left($wpdb->posts.post_title,1) in ('เ','แ','โ','ไ','ใ') OR $wpdb->posts.post_title like 'ฆ%' OR $wpdb->posts.post_title like '_ง%' and Left($wpdb->posts.post_title,1) in ('เ','แ','โ','ไ','ใ') OR $wpdb->posts.post_title like 'ง%' OR $wpdb->posts.post_title like '_จ%' and Left($wpdb->posts.post_title,1) in ('เ','แ','โ','ไ','ใ') OR $wpdb->posts.post_title like 'จ%' ) ORDER BY CONVERT($wpdb->posts.post_title USING tis620) ASC "; $pageposts = $wpdb->get_results($querystr, OBJECT); ?>
หวังว่าข้อมูลชุดนี้จะมีประโยชน์นะครับ