A-AA+then

ค้นหาแล้วแสดงคำที่ใกล้เคียงที่สุดออกมาน่ะค่ะ

1,672
รบกวนด้วยค่ะ!!! ทำเกี่ยวกับการค้นหาแล้วแสดงคำที่ใกล้เคียงมากที่สุดออกมาค่ะ
เช่น
ในฐานข้อมูล มีคำว่า ac, accept, access, account, acquisition ซึ่งทุกคำมี ac
หากค้นคำว่า acc ก้อจะแสดงคำที่มี acc  ซึ่งอันนี้ก้อคง ใช้ LIKE '$keywords%' ใช่มั้ยคะ
แต่
หากค้นคำว่า acs (ซึ่งไม่มีในฐานก้อมูล) อยากให้แสดงคำที่ใกล้เคียงที่สุดโดยดูจากอักษรตัวสุดท้ายเทียบกับคำในฐาน ข้อมูล ว่าตัวไหนมีค่าใกล้ s มากที่สุด ซึ่งในที่นี้ก้อควรแสดงคำว่า acquisition เพราะ q ใกล้ s มากที่สุด
จะต้องทำยังไงอ่ะคะ
รบกวนพี่ ๆ ช่วยด้วยนะคะ หรือมีตัวอย่างโค้ดก้อจะดีมากเลยค่ะ....ขอบคุณค่า

2 ความคิดเห็น

เป็นไปได้มั้ยครับ ถ้า...
สร้างตัวแปรขึ้นมาอีก 1 ตัวแล้วเอามาตัดตัวหลังออก 1 ตัว (หรือจะตัดหน้าหลังออก 1ตัว) แล้วเอาเข้ามาใช้ใน where ด้วย แต่ถ้าใช้แค่นี้ก็จะได้ทั้งหมดที่มีคำว่า ac ออกมาด้วย...

เพราะฉะนั้นถ้าต้องการแบบไกล้เคียงกับ s เท่านั้น ก็ต้องเอาตัวแปรมารับค่า เพื่อเอาไปเข้าฟังก์ชั้นเพื่อหาตัวที่ไกล้มากที่สุด เช่น

อันดับแรกค้นข้อมูลที่มีคำ "เหมือนกับคำค้น" ทั้งหมดเอามาแสดงก่อน
อันดับสองตัดตัวหลังคำค้นออก 1 ตัวอักษรแล้วคิวรี่เอาข้อมูลมาเก็บไว้ใน array แล้วเอา array ส่งเข้าไปในฟังก์ชั่นเพื่อหาตัวไกล้เคียงที่สุดก่อน แล้วคืนค่ามาเพื่อให้ระบบแสดงเฉพาะ record ที่ไกล้เคียงที่สุด (ไม่ว่าตัวที่ไกล้ที่สุดจะมีกี่ตัวก็ตาม)

อันนี้คิดสดครับ ยังไม่ได้ลอง.... อาจจะดิบไปหน่อยต้องขออภัย

1

ตัวอย่างคงไม่มี เพราะ ปกติ sql ทำไม่ได้

วิธีอื่นๆ ก้คล้ายๆ กับที่ blueeye บอกแหละ ครับ คือตัดตัวอักษรออก แต่มันยังคงมีอีกหลายปัญหาครับ เช่น "กลับ" และ "กับ" ถือเป็นคำใกล้เคียงกันหรือเปล่า

วิธีอื่นๆ ที่พอเป็นไปได้ แต่ไม่ค่อยเหมาะสม สำหรับ sql ก็เช่น การแตกคำ ครับ เช่น "ไปไหนมา" ก็แตกได้เป็น "ไป" "ไหน" "มา" เวลานำไปใส่ query ถ้าให้เป็น OR ทั้ง 3 ตัว ผลลัพทฺ์ คำว่า "ไปไหน" และ "ไปไหนมา" ก็จะถูกรวมไว้ด้วยได้ และถ้าหากจะมองเป็น กรณีของคำสั้นๆ เช่น ค้นหา ac เหมือนตามตัวอย่าง การแตก เป็น detail LIKE a OR deyail LIKE c คงไม่ยากเท่าไร แต่ถ้ามีการค้นหาประโยคยาวๆ วิธีนี้คงไม่เวิร์คแน่ๆ

ในทางปฏิบัติการทำคำสั่งเช่นนี้กับ mysql คงไม่ได้ผลหรอกครับ ผมไม่แนะนำ หรือถ้ายังคิดจะทำต่อ การค้นหาก็คงมีข้อจำกัดพอสมควร เนื่องจากมันไม่ได้ถูกออกแบบมาสำหรับงานลักษณะนี้
2
^