การ Query ข้อมูลใกล้เคียงตามจำนวนที่กำหนด
จากบทความ "การ Query ข้อมูลลำดับก่อนหน้าและลำดับถัดไป" วิธีนี้ มีข้อสังเกตได้ว่าหากรายการที่ต้องการเป็นรายการแรก หรือรายการสุดท้าย ตัว Query จะให้ผลลัพท์เพียง record เดียว แต่ในบางครั้งเราอาจต้องการรายการในจำนวนที่คงที่เสมอ เช่น ต้องรายการใกล้เคียงจำนวน 4 รายการทุกครั้ง เช่น
รายการที่ต้องการคือ 5 และ รายการใกล้เคียง 4 รายการคือ 3,4,6 และ 7
รายการที่ต้องการคือ 9 และ รายการใกล้เคียง 4 รายการคือ 6,7,8 และ 10 (ถัดไป 1 รายการ และ ก่อนหน้า 3 รายการ)
รายการที่ต้องการคือ 10 ซึ่งเป็นรายการสุดท้าย ผลลัพท์รายการใกล้เคียง 4 รายการจะเป็นรายการก่อนหน้าทั้งหมด คือ 6,7,8 และ 9
จากความต้องการด้านบน เรามีพระเอกขี่ม้าขาวมาช่วย ซึ่งก็คือฟังก์ชั่น ABS() ของ MySQL
จากคำสั่งด้านบน ถ้ารายการที่ต้องการคือ id=5 เราจะได้ผลลัพท์ของ query ด้านบน ตามตารางนี้
สังเกตุนะครับว่ารายการเป้าหมาย (5) ได้ผลลัพท์จาก ABS() เป็น 0 ซึ่งถ้าดูจากผลลัพท์หมายความว่ารายการใกล้เคียงคือรายการที่ ABS() เป็น 1 และ 2
ผลลัพท์ของ Query จะได้ตามตารางด้านล่าง ซึ่งจะมีจำนวนจะคงที่ 4 รายการเสมอ (ลองเปลี่ยน id เป็นรายการอื่น ตามข้อกำหนดด้านบนดูครับ)
1,2,3,4,5,6,7,8,9,10
รายการที่ต้องการคือ 5 และ รายการใกล้เคียง 4 รายการคือ 3,4,6 และ 7
1,2,3,4,5,6,7,8,9,10
รายการที่ต้องการคือ 9 และ รายการใกล้เคียง 4 รายการคือ 6,7,8 และ 10 (ถัดไป 1 รายการ และ ก่อนหน้า 3 รายการ)
1,2,3,4,5,6,7,8,9,10
รายการที่ต้องการคือ 10 ซึ่งเป็นรายการสุดท้าย ผลลัพท์รายการใกล้เคียง 4 รายการจะเป็นรายการก่อนหน้าทั้งหมด คือ 6,7,8 และ 9
จากความต้องการด้านบน เรามีพระเอกขี่ม้าขาวมาช่วย ซึ่งก็คือฟังก์ชั่น ABS() ของ MySQL
SELECT id,field_name,ABS(id-5) FROM table_name
จากคำสั่งด้านบน ถ้ารายการที่ต้องการคือ id=5 เราจะได้ผลลัพท์ของ query ด้านบน ตามตารางนี้
id | field_name | ABS(id-5) |
---|---|---|
1 | ไฟล์ดาวน์โหลด | 4 |
2 | คุณรู้บ้างไหม | 3 |
3 | กฎหมายฮาๆ ของอเมริกา | 2 |
4 | การทำ from logig ด้วย php กับฐานข้อมูล oracle | 1 |
5 | สุดยอดหลุม | 0 |
6 | มาเร่งความเร็วเว็บเราด้วย htaccess กัน | 1 |
7 | แหล่งรวม Text Books สำหรับ WebDeveloper และ Programer ทั้งหลาย | 2 |
8 | subdomain(by samyuranun)by webmaster[cs siam edu] | 3 |
9 | Regular Expressions Tutorial | 4 |
10 | php ini recommend settings[by SamYuranun] | 5 |
สังเกตุนะครับว่ารายการเป้าหมาย (5) ได้ผลลัพท์จาก ABS() เป็น 0 ซึ่งถ้าดูจากผลลัพท์หมายความว่ารายการใกล้เคียงคือรายการที่ ABS() เป็น 1 และ 2
SELECT * FROM ( <= SELECT ชั้นนอกใช้เพื่อเรียงลำดับผลลัท์ตาม id
SELECT id,field_name,ABS(id-5) AS p
FROM table_name
WHERE id!=5 <= ไม่รวมรายการที่ต้องการ
ORDER BY p <= เรียงลำดับตาม ABS()
LIMIT 4
) AS Q ORDER BY id
ผลลัพท์ของ Query จะได้ตามตารางด้านล่าง ซึ่งจะมีจำนวนจะคงที่ 4 รายการเสมอ (ลองเปลี่ยน id เป็นรายการอื่น ตามข้อกำหนดด้านบนดูครับ)
id | field_name | p |
---|---|---|
3 | กฎหมายฮาๆ ของอเมริกา | 2 |
4 | การทำ from logig ด้วย php กับฐานข้อมูล oracle | 1 |
6 | มาเร่งความเร็วเว็บเราด้วย htaccess กัน | 1 |
7 | แหล่งรวม Text Books สำหรับ WebDeveloper และ Programer ทั้งหลาย | 2 |