 |
ขอคำแนะนำการค้นหา search หลาย fields หน่อยครับ เนื่องจาก มีจำนวนประมาณ 30 fields ..... |
|
 |
|
|
 |
 |
|
เอาอันที่สำคัญ ก็พอครับ ไม่จำเป็ต้อง search ได้ทุก field
รึจะทำก็ได้นะ ^^
|
 |
 |
 |
 |
Date :
2012-09-06 15:55:59 |
By :
Krungsri |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เอาพวกชื่อ วันที่ ประเภทไรพวกนี้หละ สำคัญๆๆ
|
 |
 |
 |
 |
Date :
2012-09-06 16:02:41 |
By :
sambrazil |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ยิ่งเงื่อนไขเยอะ มันก็ยิ่งช้าน่ะครับ 
|
 |
 |
 |
 |
Date :
2012-09-06 16:14:45 |
By :
mr.win |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้าข้อมูลในแต่ละฟิลดิ์มีความยาวไม่มากนัก... ลองแบ่งกลุ่มฟิลดิ์ที่ไกล้เคียงกัน เป็นชุดๆ แล้วนำแต่ละชุดมา CONCAT กัน
โดยที่พยายามแบ่งให้น้อยที่สุดเท่าที่จะทำได้ เช่น 3 กลุ่ม เช่น
Code
WHERE
CONCAT(field1,'|',field2, '|', field3, '|', field4) LIKE '%string_search%' OR
CONCAT(field5,'|',field6, '|', field7, '|', field8) LIKE '%string_search%' OR
CONCAT(field9,'|',field10, '|', field11, '|', field12) LIKE '%string_search%'
............. ต่อได้อีกเรื่อยๆ........
ถ้าจำนวนฟิลดิ์ไม่มากเท่าใดนักก็ไม่ต้อง CONCAT ก็ได้นะครับ ที่ใส่เครื่องหมาย '|'
ก็เผื่อว่าบางทีข้อมูลที่เชื่อมต่อกันอาจจะเชื่อมเข้าหากันแล้วดันได้คำที่ตรงกับคำค้นพอดี
แนะนำว่า ถ้าไม่จำเป็นก็ไม่ควรจะค้นหาได้หลายๆฟิลดิ์แบบนี้ในครั้งเดียวนะครับ ถ้าระบบใหญ่ขึ้นจะมีปัญหา
เพราะฉะนั้น เวลาเขียน app ก็ควรจะแบ่งหน้าสำหรับค้นหาให้เป็นหมวดหมู่แยกกัน..
แต่ถ้่าจำเป็นแบบนี้ก็ทดสอบโดยคำนึงถึงปริมาณข้อมูลในอนาคตด้วยว่ามีมากน้อยเพียงใด
|
 |
 |
 |
 |
Date :
2012-09-06 16:25:55 |
By :
Songkram |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ไม่ควร concat ครับ ทำให้ช้าลง เพราะต้องนำข้อมูลมาคำนวนใหม่
เขียนแบบปกติ ระบบ database สามารถ optimize ให้ตามความเหมาะสมครับ
|
 |
 |
 |
 |
Date :
2012-09-07 20:52:50 |
By :
:) |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณทุกความคิดเห็นครับ 
|
 |
 |
 |
 |
Date :
2012-09-10 07:46:29 |
By :
nattkhanesha |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|