ThaiSEOBoard.com

อื่นๆ => Cafe => ข้อความที่เริ่มโดย: น้องบิ้ว ที่ 09 กันยายน 2009, 10:20:22



หัวข้อ: [help] ใครเก่ง php mysql ช่วยทีคับ เขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง (แก้ได้ระ)
เริ่มหัวข้อโดย: น้องบิ้ว ที่ 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/forum/index.php?action=printpage;topic=1472.0

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

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

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

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

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

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

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

ขอบคุณครับ   :-*


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: WPDSign ที่ 09 กันยายน 2009, 10:21:52
ขอบคุณครับ ที่ตั้งกระทู้นี้ อย่ารู้อยู่เหมือนกัน


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: น้องบิ้ว ที่ 09 กันยายน 2009, 10:51:54
 :-* Please


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: Synchronize ที่ 09 กันยายน 2009, 11:13:15
ย้ายไปใช้ Oracle แทนครับ  :D

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


(http://img.ihere.org/uploads/3733714919.jpg)


ปล. ไม่ได้ช่วยตอบคำถามเลยนี่หว่า ตู  :-X


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: Synchronize ที่ 09 กันยายน 2009, 11:31:28
พอดีตั้งคำถามน่าสนใจดี ผมเลยลองๆ ไปงม ดูว่า ทำยังไงกะกรณีแบบนี้ ...

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

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

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



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

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

(http://img.ihere.org/uploads/a0937a4a2c.jpg)


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


โค๊ด:
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


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


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: น้องบิ้ว ที่ 09 กันยายน 2009, 12:33:44
พอดีตั้งคำถามน่าสนใจดี ผมเลยลองๆ ไปงม ดูว่า ทำยังไงกะกรณีแบบนี้ ...

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

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

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





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

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

([url]http://img.ihere.org/uploads/a0937a4a2c.jpg[/url])


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


โค๊ด:
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


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


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

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

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

ปล. ส่วน Oracle ผมไม่รุ้จักอะคับ คือผมทำในเว็บไซต์นะครับ  :P


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: น้องบิ้ว ที่ 09 กันยายน 2009, 13:12:51
นั่งงมไม่ได้สักที มีใครพอจะช่วยแนะนำได้อีกไหมคับ
ขอบคุณครับ  :-*


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: navico ที่ 09 กันยายน 2009, 13:51:54
เท่าที่นั่งค้นๆมา ทราบแต่เพียงว่าถ้าใช้เป็น tis620 จะสามารถเรียงแบบนั้นได้ นะครับ โดยไม่ต้องเขียน sql ให้ยุ่งยาก
เค้าว่ากันว่า
อ้างถึง
ถ้าเราเข้ารหัสแบบ TIS-620 จะเลือกได้ว่าเรียงลำดับแบบไบนารี หรือตามพจนานุกรมไทย
ถ้าเข้าแบบ UTF-8 จะเรียงได้ตาม unicode แบบไบนารีเท่านั้น

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

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


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: @@@ ที่ 09 กันยายน 2009, 14:01:00
เท่าที่นั่งค้นๆมา ทราบแต่เพียงว่าถ้าใช้เป็น tis620 จะสามารถเรียงแบบนั้นได้ นะครับ โดยไม่ต้องเขียน sql ให้ยุ่งยาก
เค้าว่ากันว่า
อ้างถึง
ถ้าเราเข้ารหัสแบบ TIS-620 จะเลือกได้ว่าเรียงลำดับแบบไบนารี หรือตามพจนานุกรมไทย
ถ้าเข้าแบบ UTF-8 จะเรียงได้ตาม unicode แบบไบนารีเท่านั้น

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

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

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


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: Synchronize ที่ 09 กันยายน 2009, 14:27:13
โอ้ว จริงๆ ด้วยครับ tis620 เรียงถูกจริงๆ ด้วยโดยไม่ต้องเขียน sql ให้ยุ่งยากเลย



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

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


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


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: น้องบิ้ว ที่ 09 กันยายน 2009, 14:33:20
โอ้ว จริงๆ ด้วยครับ tis620 เรียงถูกจริงๆ ด้วยโดยไม่ต้องเขียน sql ให้ยุ่งยากเลย



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

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


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

หง่าา ไม่รู้จะกระทบกับส่วนอื่นหรือป่าว ไว้เด๋วจะลองดูครับ
ขอบคุณมากคับผม  :-*


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: ayeweb ที่ 09 กันยายน 2009, 15:29:46
มาแอบๆๆเก็บความรู้ฟรีครับ  ;D


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: ipasta ที่ 09 กันยายน 2009, 16:22:08
ได้ความรู้ด้วยเลย พอดีเข้ามาอ่านเจอ เห็นหัวข้อน่าสนใจ
เพราะคิดว่าหลายคนน่าจะประสบปัญหานี้เช่นกัน

ขอบคุณหลายๆ เด้อ  :-*


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: kudjung ที่ 09 กันยายน 2009, 17:00:19
เคยติดปัญหานี้เหมือนกัน

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

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


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: น้องบิ้ว ที่ 09 กันยายน 2009, 17:48:45
เคยติดปัญหานี้เหมือนกัน

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

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

ผมลองเรียงใน ตารางเป็น tis620-gernal_ci นะคับ  มันก็เรียงเหมือนเดิมอะครับ  :P


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: navico ที่ 09 กันยายน 2009, 17:51:27
เคยติดปัญหานี้เหมือนกัน

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

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


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: น้องบิ้ว ที่ 09 กันยายน 2009, 18:06:05
เคยติดปัญหานี้เหมือนกัน

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

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


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

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

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

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

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

ขอบคุณครับ   :-*


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: Synchronize ที่ 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";

 ;D 


หัวข้อ: Re: [help] ใครเก่ง php mysql ช่วยทีคับ อยากเขียนคำสั่งเรียงตัวอักษรให้ถูกต้อง
เริ่มหัวข้อโดย: น้องบิ้ว ที่ 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";

 ;D 

เย้ๆๆๆ ได้แล้วคับคุณ 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";

ถ้าไม่มีพี่ช่วยนี่งม นานเรยคับ ขอบคุณมากๆคับ
ขอบคุณเืพื่อนๆท่านอื่นที่ช่วยแนะนำด้วยคับ  :'(