ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comอื่นๆCafe[help] ใครเก่ง php mysql ช่วยทีคับ เขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง (แก้ได้ระ)
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: [help] ใครเก่ง php mysql ช่วยทีคับ เขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง (แก้ได้ระ)  (อ่าน 7714 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
น้องบิ้ว
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 190
ออฟไลน์ ออฟไลน์

กระทู้: 3,628



ดูรายละเอียด
« เมื่อ: 09 กันยายน 2009, 10:20:22 »

ดีครับ ผมหาข้อมูลในเน็ตแล้วเจอครับ แต่ใช้ไม่เป็น

ตอนนี้เวบผมมันเรียง A - Z ได้คับ  และเรียงภาษาไทยจาก ก-ฮ ได้ แต่!! มันมีสระมาอยู่ด้วย พวกสระ โ เ แ นะคับ มันดันไปอยู่ท้ายๆ คืออยากเรียงประมาณว่า

ก้อง
กิน
แก
โก
ไก่

แต่ตอนนี้ พวกสระ โ แ เ มันไม่เรียงแบบนี้ไงครับ มันไปอยู่ท้ายสุด แก้ปัญหานี้ได้ไหมคับ

นี่คำสั่ง mysql ของผม

$sql = "select DISTINCT name from name_tb WHERE name  LIKE '$a%' order by name ASC limit $rsPage,$pageSize";

นี่เป็นข้อมูลการเรียงลำดับครับ ผมเอามาใส่แล้วแต่เวบมัน error

โค๊ด:
tis620_thai_ci เรียงตามพจนานุกรมเลยครับ
สนใจพยัญชนะมาก่อน แล้วจึงพิจารณาสระทีหลัง อันนี้น่าจะดีกว่า :D

SELECT *
FROM testtable
ORDER BY ppp COLLATE tis620_thai_ci ASC;

http://share.psu.ac.th/blog/ntalk/12495
http://www.appservnetwork.com/...?action=printpage;topic=1472.0

ขอบคุณมากครับผม

===================================

โทษทีครับบ!! คิดว่าตั้งคำถามผิดนิดนึง คือ   Tongue

ตอนนี้ผมเรียกแบบนี้ครับ
ก | ข |....ห | ฬ | อ | ฮ | โ | ไ | ใ | เ | แ  แล้วใส่ link เรียกจากฐานข้อมูล  คือ
กด  ก มันจะมีแสดง ก ทั้งหมดครับ แต่พวกคำว่า ไก ไก่ เกมส์ มันไม่แสดงครับ

ถ้าอยากให้แสดงต้องกด  | โ | ไ | ใ | เ | แ   ถึงจะออกมาคับ

ขออภัยครับ ตั้งคำถามผิด แบบนี้แก้ได้ไหมครับ

ตอนนี้โค๊ดเรียกแบบนี้ครับ
โค๊ด:
$sql = "select DISTINCT name from name_tb WHERE name  LIKE '$a%' order by name ASC limit $rsPage,$pageSize";

ขอบคุณครับ   Kiss
« แก้ไขครั้งสุดท้าย: 09 กันยายน 2009, 18:40:24 โดย น้องบิ้ว » บันทึกการเข้า
WPDSign
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 500
ออฟไลน์ ออฟไลน์

กระทู้: 9,060



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 09 กันยายน 2009, 10:21:52 »

ขอบคุณครับ ที่ตั้งกระทู้นี้ อย่ารู้อยู่เหมือนกัน
บันทึกการเข้า

สร้างบ้าน Modern แบบบ้านโมเดิร์น มาแรง
» ต้องการสร้างบ้านดูแบบบ้านสวยๆ แบบบ้านสองชั้น ทุกสไลต์บริการรับสร้างบ้าน ใครฝันอย่างสร้างบ้านสไตล์รีสอร์ท มีแบบบ้านสไตล์รีสอร์ท พร้อมก่อสร้าง ลงประกาศขายบ้านที่ ลงประกาศ
น้องบิ้ว
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 190
ออฟไลน์ ออฟไลน์

กระทู้: 3,628



ดูรายละเอียด
« ตอบ #2 เมื่อ: 09 กันยายน 2009, 10:51:54 »

 Kiss Please
บันทึกการเข้า
Synchronize
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 83
ออฟไลน์ ออฟไลน์

กระทู้: 1,231



ดูรายละเอียด
« ตอบ #3 เมื่อ: 09 กันยายน 2009, 11:13:15 »

ย้ายไปใช้ Oracle แทนครับ  Cheesy

ทำรูปมาให้ดูเลย ของเค้าเจ๋งจริงๆ  Grin





ปล. ไม่ได้ช่วยตอบคำถามเลยนี่หว่า ตู  Lips Sealed
บันทึกการเข้า

Synchronize
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 83
ออฟไลน์ ออฟไลน์

กระทู้: 1,231



ดูรายละเอียด
« ตอบ #4 เมื่อ: 09 กันยายน 2009, 11:31:28 »

พอดีตั้งคำถามน่าสนใจดี ผมเลยลองๆ ไปงม ดูว่า ทำยังไงกะกรณีแบบนี้ ...

ตอนแรกลองโค้ดตามที่บิ้วให้มา

โค๊ด:
SELECT *
FROM base_province
ORDER BY province_name COLLATE utf8_unicode_ci ASC;
(ผมใช้ UTF-8 น่ะ)

ประมาฏว่า มันก็เรียงเหมือนเดิมนี่หว่า Huh?



เลยมั่วโค้ดมาแบบกำปั้นทุบดินซะเลย (ผมว่ามันคงจะมีวิธีดีกว่านี้แน่ๆ)

สรุปได้ผลดังรูปครับ




ส่วนของบิ้ว น่าจะเขียนโค้ดได้ประมาณนี้


โค๊ด:
select DISTINCT name from name_tb WHERE name  LIKE '$a%' 
order by if(substr(name, 1, 1) in ('เ', 'แ', 'ไ', 'ใ', 'โ'),
     concat(substr(name, 2, 1), substr(name, 1,1), substr(name, 3)), name) ASC
limit $rsPage, $pageSize


ขอย้ำว่า มันคงมีวิธีที่ดีกว่านี้แหงๆ   Grin
บันทึกการเข้า

น้องบิ้ว
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 190
ออฟไลน์ ออฟไลน์

กระทู้: 3,628



ดูรายละเอียด
« ตอบ #5 เมื่อ: 09 กันยายน 2009, 12:33:44 »

พอดีตั้งคำถามน่าสนใจดี ผมเลยลองๆ ไปงม ดูว่า ทำยังไงกะกรณีแบบนี้ ...

ตอนแรกลองโค้ดตามที่บิ้วให้มา

โค๊ด:
SELECT *
FROM base_province
ORDER BY province_name COLLATE utf8_unicode_ci ASC;
(ผมใช้ UTF-8 น่ะ)

ประมาฏว่า มันก็เรียงเหมือนเดิมนี่หว่า Huh?





เลยมั่วโค้ดมาแบบกำปั้นทุบดินซะเลย (ผมว่ามันคงจะมีวิธีดีกว่านี้แน่ๆ)

สรุปได้ผลดังรูปครับ




ส่วนของบิ้ว น่าจะเขียนโค้ดได้ประมาณนี้


โค๊ด:
select DISTINCT name from name_tb WHERE name  LIKE '$a%' 
order by if(substr(name, 1, 1) in ('เ', 'แ', 'ไ', 'ใ', 'โ'),
     concat(substr(name, 2, 1), substr(name, 1,1), substr(name, 3)), name) ASC
limit $rsPage, $pageSize


ขอย้ำว่า มันคงมีวิธีที่ดีกว่านี้แหงๆ   Grin


ขอบคุณมากครับผม ผมลองแล้วครับ ทั้งสองอันครับ ไม่ error แต่แสดงผลมันยังเรียงเหมือนเดิมอะครับ ไม่มีสระโผล่ออกมา หรือว่าเพราะในฐานข้อมูลใน phpmyadmin  มันเรียงแบบสระอยู่ท้ายๆอะครับ หะๆ ไม่รู้ว่าจะแก้ไขไงดี

ใน phpmyadmin  Structure  ของผมเปนงี้คับ name  varchar(200)  utf8_general_ci

แต่ก็ขอบคุณมากนะคับ ลองงมดูก่อน  Kiss

ปล. ส่วน Oracle ผมไม่รุ้จักอะคับ คือผมทำในเว็บไซต์นะครับ  Tongue
« แก้ไขครั้งสุดท้าย: 09 กันยายน 2009, 12:39:48 โดย น้องบิ้ว » บันทึกการเข้า
น้องบิ้ว
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 190
ออฟไลน์ ออฟไลน์

กระทู้: 3,628



ดูรายละเอียด
« ตอบ #6 เมื่อ: 09 กันยายน 2009, 13:12:51 »

นั่งงมไม่ได้สักที มีใครพอจะช่วยแนะนำได้อีกไหมคับ
ขอบคุณครับ  Kiss
บันทึกการเข้า
navico
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 108
ออฟไลน์ ออฟไลน์

กระทู้: 2,315



ดูรายละเอียด เว็บไซต์
« ตอบ #7 เมื่อ: 09 กันยายน 2009, 13:51:54 »

เท่าที่นั่งค้นๆมา ทราบแต่เพียงว่าถ้าใช้เป็น tis620 จะสามารถเรียงแบบนั้นได้ นะครับ โดยไม่ต้องเขียน sql ให้ยุ่งยาก
เค้าว่ากันว่า
อ้างถึง
ถ้าเราเข้ารหัสแบบ TIS-620 จะเลือกได้ว่าเรียงลำดับแบบไบนารี หรือตามพจนานุกรมไทย
ถ้าเข้าแบบ UTF-8 จะเรียงได้ตาม unicode แบบไบนารีเท่านั้น

นี่คือการเรียงลำดับแบบไบนารี ซึ่งดูแล้วไม่ถูกต้องนัก
กอ
ขอ
คอ
เก
เข
แก
แค
โก

นี่คือการเรียงลำดับตามพจนานุกรมไทย
กอ
เก
แก
โก
ขอ
เข
คอ
แค
บันทึกการเข้า
@@@
Administrator
สมุนแก๊งเสียว
*

พลังน้ำใจ: 33
ออฟไลน์ ออฟไลน์

กระทู้: 634



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 09 กันยายน 2009, 14:01:00 »

เท่าที่นั่งค้นๆมา ทราบแต่เพียงว่าถ้าใช้เป็น tis620 จะสามารถเรียงแบบนั้นได้ นะครับ โดยไม่ต้องเขียน sql ให้ยุ่งยาก
เค้าว่ากันว่า
อ้างถึง
ถ้าเราเข้ารหัสแบบ TIS-620 จะเลือกได้ว่าเรียงลำดับแบบไบนารี หรือตามพจนานุกรมไทย
ถ้าเข้าแบบ UTF-8 จะเรียงได้ตาม unicode แบบไบนารีเท่านั้น

นี่คือการเรียงลำดับแบบไบนารี ซึ่งดูแล้วไม่ถูกต้องนัก
กอ
ขอ
คอ
เก
เข
แก
แค
โก

นี่คือการเรียงลำดับตามพจนานุกรมไทย
กอ
เก
แก
โก
ขอ
เข
คอ
แค

ก่อนอืนเลยนะครับ
DB ต้องเป็น tis620
Table  ต้องเป็น tis620
บันทึกการเข้า

รับซื้อเว็บ 100uip ต่อวันขึ้นไป EA Forex
Synchronize
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 83
ออฟไลน์ ออฟไลน์

กระทู้: 1,231



ดูรายละเอียด
« ตอบ #9 เมื่อ: 09 กันยายน 2009, 14:27:13 »

โอ้ว จริงๆ ด้วยครับ tis620 เรียงถูกจริงๆ ด้วยโดยไม่ต้องเขียน sql ให้ยุ่งยากเลย



แต่ ผมไม่ได้ทำ db เป็น tis620 กับ table เป็น tis620 เลยน่ะ ... แค่ปรับ ฟิลด์ที่จะเรียงเป็น tis620 ฟิลด์เดียว

ก่อนอืนเลยนะครับ
DB ต้องเป็น tis620
Table  ต้องเป็น tis620


แสดงว่า oracle ตัวที่ผมใช้เป็น TIS620 ล่ะมั้งเนี่ย Cheesy
บันทึกการเข้า

น้องบิ้ว
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 190
ออฟไลน์ ออฟไลน์

กระทู้: 3,628



ดูรายละเอียด
« ตอบ #10 เมื่อ: 09 กันยายน 2009, 14:33:20 »

โอ้ว จริงๆ ด้วยครับ tis620 เรียงถูกจริงๆ ด้วยโดยไม่ต้องเขียน sql ให้ยุ่งยากเลย



แต่ ผมไม่ได้ทำ db เป็น tis620 กับ table เป็น tis620 เลยน่ะ ... แค่ปรับ ฟิลด์ที่จะเรียงเป็น tis620 ฟิลด์เดียว

ก่อนอืนเลยนะครับ
DB ต้องเป็น tis620
Table  ต้องเป็น tis620


แสดงว่า oracle ตัวที่ผมใช้เป็น TIS620 ล่ะมั้งเนี่ย Cheesy

หง่าา ไม่รู้จะกระทบกับส่วนอื่นหรือป่าว ไว้เด๋วจะลองดูครับ
ขอบคุณมากคับผม  Kiss
บันทึกการเข้า
ayeweb
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 5,205



ดูรายละเอียด เว็บไซต์
« ตอบ #11 เมื่อ: 09 กันยายน 2009, 15:29:46 »

มาแอบๆๆเก็บความรู้ฟรีครับ  Grin
บันทึกการเข้า


ข่าวไอที ข่าวสารไอที แอพไอโฟน บริการอื่นๆ
บริการ ตรวจหวย อื่นๆ ทั่วไปสาระน่ารู้ ความรู้ต่างๆ
Host ไทย เว็บผู้หญิงนะคะ แต่ผู้ชายก็เข้าได้ค่ะ
ตรวจหวย
ตรวจหวย ผลสลากกินแบ่งรัฐบาล>>
เช่าโฮสติ้ง Ruk-com
ipasta
คนรักเสียว
*

พลังน้ำใจ: 5
ออฟไลน์ ออฟไลน์

กระทู้: 116



ดูรายละเอียด เว็บไซต์
« ตอบ #12 เมื่อ: 09 กันยายน 2009, 16:22:08 »

ได้ความรู้ด้วยเลย พอดีเข้ามาอ่านเจอ เห็นหัวข้อน่าสนใจ
เพราะคิดว่าหลายคนน่าจะประสบปัญหานี้เช่นกัน

ขอบคุณหลายๆ เด้อ  Kiss
บันทึกการเข้า

kudjung
สมุนแก๊งเสียว
*

พลังน้ำใจ: 45
ออฟไลน์ ออฟไลน์

กระทู้: 985



ดูรายละเอียด เว็บไซต์
« ตอบ #13 เมื่อ: 09 กันยายน 2009, 17:00:19 »

เคยติดปัญหานี้เหมือนกัน

ปรับในฟิลด์ในตารางที่จะเรียงเป็น tis620 ครับ มันเป็นลักษะการเรียงลำดับตัวอักษรครับ
ส่วนเปลี่ยน db เป็น tis620 ไม่จำเป็นครับ เก็บข้อมูลเป็น UTF8 ก็ได้ไม่มีปัญหา

ซึ่งงานที่ผมทำก็กำหนดค่าการเรียงเป็น tis620 เพราะมันแสดงผลตามหลักการเรียงของภาษาไทยมากกว่า
บันทึกการเข้า

น้องบิ้ว
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 190
ออฟไลน์ ออฟไลน์

กระทู้: 3,628



ดูรายละเอียด
« ตอบ #14 เมื่อ: 09 กันยายน 2009, 17:48:45 »

เคยติดปัญหานี้เหมือนกัน

ปรับในฟิลด์ในตารางที่จะเรียงเป็น tis620 ครับ มันเป็นลักษะการเรียงลำดับตัวอักษรครับ
ส่วนเปลี่ยน db เป็น tis620 ไม่จำเป็นครับ เก็บข้อมูลเป็น UTF8 ก็ได้ไม่มีปัญหา

ซึ่งงานที่ผมทำก็กำหนดค่าการเรียงเป็น tis620 เพราะมันแสดงผลตามหลักการเรียงของภาษาไทยมากกว่า

ผมลองเรียงใน ตารางเป็น tis620-gernal_ci นะคับ  มันก็เรียงเหมือนเดิมอะครับ  Tongue
บันทึกการเข้า
navico
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 108
ออฟไลน์ ออฟไลน์

กระทู้: 2,315



ดูรายละเอียด เว็บไซต์
« ตอบ #15 เมื่อ: 09 กันยายน 2009, 17:51:27 »

เคยติดปัญหานี้เหมือนกัน

ปรับในฟิลด์ในตารางที่จะเรียงเป็น tis620 ครับ มันเป็นลักษะการเรียงลำดับตัวอักษรครับ
ส่วนเปลี่ยน db เป็น tis620 ไม่จำเป็นครับ เก็บข้อมูลเป็น UTF8 ก็ได้ไม่มีปัญหา

ซึ่งงานที่ผมทำก็กำหนดค่าการเรียงเป็น tis620 เพราะมันแสดงผลตามหลักการเรียงของภาษาไทยมากกว่า
ขอบคุณครับ ใช้ได้จริง ชัดเจนครับ
เปลี่ยนเฉพาะ ฟิลด์ที่เราจะใช้เรียง ก็โอเคเลย...
บันทึกการเข้า
น้องบิ้ว
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 190
ออฟไลน์ ออฟไลน์

กระทู้: 3,628



ดูรายละเอียด
« ตอบ #16 เมื่อ: 09 กันยายน 2009, 18:06:05 »

เคยติดปัญหานี้เหมือนกัน

ปรับในฟิลด์ในตารางที่จะเรียงเป็น tis620 ครับ มันเป็นลักษะการเรียงลำดับตัวอักษรครับ
ส่วนเปลี่ยน db เป็น tis620 ไม่จำเป็นครับ เก็บข้อมูลเป็น UTF8 ก็ได้ไม่มีปัญหา

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


โทษทีครับบ!! คิดว่าตั้งคำถามผิดนิดนึง คือ   Tongue

ตอนนี้ผมเรียกแบบนี้ครับ
ก | ข |....ห | ฬ | อ | ฮ | โ | ไ | ใ | เ | แ  แล้วใส่ link เรียกจากฐานข้อมูล  คือ
กด  ก มันจะมีแสดง ก ทั้งหมดครับ แต่พวกคำว่า ไก ไก่ เกมส์ มันไม่แสดงครับ

ถ้าอยากให้แสดงต้องกด  | โ | ไ | ใ | เ | แ   ถึงจะออกมาคับ

ขออภัยครับ ตั้งคำถามผิด แบบนี้แก้ได้ไหมครับ

ตอนนี้โค๊ดเรียกแบบนี้ครับ
โค๊ด:
$sql = "select DISTINCT name from name_tb WHERE name  LIKE '$a%' order by name ASC limit $rsPage,$pageSize";

ขอบคุณครับ   Kiss
« แก้ไขครั้งสุดท้าย: 09 กันยายน 2009, 18:15:00 โดย น้องบิ้ว » บันทึกการเข้า
Synchronize
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 83
ออฟไลน์ ออฟไลน์

กระทู้: 1,231



ดูรายละเอียด
« ตอบ #17 เมื่อ: 09 กันยายน 2009, 18:19:01 »

อันนี้ผมมั่วนะครับ ... คิดว่าคงมีวิธ๊ที่ดีกว่านี้ (อีกแล้ว)

โค๊ด:
$sql = "select DISTINCT name from name_tb WHERE name  LIKE '$a%' or name  LIKE '_$a%' order by name ASC limit $rsPage,$pageSize";

 Grin 
บันทึกการเข้า

น้องบิ้ว
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 190
ออฟไลน์ ออฟไลน์

กระทู้: 3,628



ดูรายละเอียด
« ตอบ #18 เมื่อ: 09 กันยายน 2009, 18:37:35 »

อันนี้ผมมั่วนะครับ ... คิดว่าคงมีวิธ๊ที่ดีกว่านี้ (อีกแล้ว)

โค๊ด:
$sql = "select DISTINCT name from name_tb WHERE name  LIKE '$a%' or name  LIKE '_$a%' order by name ASC limit $rsPage,$pageSize";

 Grin 

เย้ๆๆๆ ได้แล้วคับคุณ Synchronize  เทพมากๆคับผม ขอบคุณมากๆเลยครับ กราบๆๆ  แต่ต้องปรับนิดนึงครับ คือถ้าใส่ _$a%  มันจะมีพวกอักษรอื่นมาด้วย เช่น  ถ้ากด  ก  มันจะโผล่ 
นก, ตก , คืออักษรมันโผล่มาด้วย  เรยต้องใส่ สระ fix เข้าไป   

ตามนี้ครับ

$sql = "select DISTINCT name  from name_tb WHERE name  LIKE '$a%' || name  LIKE 'โ$a%' || name  LIKE 'ไ$a%' || name  LIKE 'เ$a%' || name LIKE 'แ$a%' || name  LIKE 'ใ$a%' order by name  ASC limit $rsPage,$pageSize";

ถ้าไม่มีพี่ช่วยนี่งม นานเรยคับ ขอบคุณมากๆคับ
ขอบคุณเืพื่อนๆท่านอื่นที่ช่วยแนะนำด้วยคับ  Cry
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
พิมพ์