การแสดงรายการที่เกี่ยวข้อง (Related)
SELECT id,topic,relate FROM table_name WHERE relate='ทำเว็บให้มีคนดู'
คำสั่ง SQL ด้านบนคือการค้นหารายการที่เกี่ยวข้องกัน (relate เหมือนกัน) ได้ผลลัพท์ดังตาราง
id | topic | relate |
---|---|---|
218 | ทำเว็บให้มีคนดู (ตอนที่ 1) | ทำเว็บให้มีคนดู |
219 | ทำเว็บให้มีคนดู (ตอนที่ 2) | ทำเว็บให้มีคนดู |
398 | ทำเว็บให้มีคนดู (ตอนที่ 4) | ทำเว็บให้มีคนดู |
449 | ทำเว็บให้มีคนดู (ตอนที่ 5) | ทำเว็บให้มีคนดู |
450 | ทำเว็บให้มีคนดู (ตอนที่ 6) | ทำเว็บให้มีคนดู |
451 | ทำเว็บให้มีคนดู (ตอนที่ 7) | ทำเว็บให้มีคนดู |
452 | ทำเว็บให้มีคนดู (ตอนที่ 8) | ทำเว็บให้มีคนดู |
453 | ทำเว็บให้มีคนดู (ตอนที่ 9) | ทำเว็บให้มีคนดู |
454 | ทำเว็บให้มีคนดู (ตอนที่ 10) | ทำเว็บให้มีคนดู |
220 | ทำเว็บให้มีคนดู (ตอนที่ 3) | ทำเว็บให้มีคนดู |
3733 | ทำเว็บให้มีคนดู (ตอนที่ 11) | ทำเว็บให้มีคนดู |
การแก้ไขเราอาจต้องใช้เทคนิคอื่นในการจัดการเพิ่มเติม (ตัวอย่างนี้จะหารายการที่เกี่ยวข้องกับ id=449 จำนวน x รายการ)
SELECT @row:=@row+1 AS row,
y.* FROM (SELECT id,topic,relate FROM table_name WHERE id>449 ORDER BY id ASC LIMIT x) AS y
,(SELECT @row:=0) AS r
ขั้นแรกเราจะ query เอารายการที่มากกว่า 449 ออกมา พร้อมใส่เลขลำดับ โดยเรียงตามลำดับ id ซึ่งจะได้ผลลัพท์ดังตาราง
row | id | topic | relate |
---|---|---|---|
1 | 450 | ทำเว็บให้มีคนดู (ตอนที่ 6) | ทำเว็บให้มีคนดู |
2 | 451 | ทำเว็บให้มีคนดู (ตอนที่ 7) | ทำเว็บให้มีคนดู |
3 | 452 | ทำเว็บให้มีคนดู (ตอนที่ 8) | ทำเว็บให้มีคนดู |
4 | 453 | ทำเว็บให้มีคนดู (ตอนที่ 9) | ทำเว็บให้มีคนดู |
6 | 454 | ทำเว็บให้มีคนดู (ตอนที่ 10) | ทำเว็บให้มีคนดู |
6 | 3733 | ทำเว็บให้มีคนดู (ตอนที่ 11) | ทำเว็บให้มีคนดู |
ขั้นต่อไปเราจะ Query เอารายการก่อนรายการที่ 449
SELECT @row:=@row+1 AS row,
y.* FROM (SELECT id,topic,relate FROM table_name WHERE id<449 ORDER BY id DESC LIMIT x) AS y
,(SELECT @row:=0) AS r
ซึ่งจะได้ผลลัพท์เป็น
row | id | topic | relate |
---|---|---|---|
1 | 398 | ทำเว็บให้มีคนดู (ตอนที่ 4) | ทำเว็บให้มีคนดู |
2 | 220 | ทำเว็บให้มีคนดู (ตอนที่ 3) | ทำเว็บให้มีคนดู |
3 | 219 | ทำเว็บให้มีคนดู (ตอนที่ 2) | ทำเว็บให้มีคนดู |
4 | 218 | ทำเว็บให้มีคนดู (ตอนที่ 1) | ทำเว็บให้มีคนดู |
SELECT * FROM (
(SELECT @row:=@row+1 AS row,
y.* FROM (SELECT id,topic,relate FROM table_name WHERE id>449 ORDER BY id ASC LIMIT x) AS y
,(SELECT @row:=0) AS r)
UNION
(SELECT @row2:=@row2+1 AS row2,
y.* FROM (SELECT id,topic,relate FROM table_name WHERE id<449 ORDER BY id DESC LIMIT x) AS y
,(SELECT @row2:=0) AS r)
) AS Z ORDER BY row LIMIT x
จะได้ผลลัพท์เป็น (ผลลัพท์ตามตัวอย่างนี้ กำหนดให้ x=4)
row | id | topic | relate |
---|---|---|---|
1 | 398 | ทำเว็บให้มีคนดู (ตอนที่ 4) | ทำเว็บให้มีคนดู |
1 | 450 | ทำเว็บให้มีคนดู (ตอนที่ 6) | ทำเว็บให้มีคนดู |
2 | 220 | ทำเว็บให้มีคนดู (ตอนที่ 3) | ทำเว็บให้มีคนดู |
2 | 451 | ทำเว็บให้มีคนดู (ตอนที่ 7) | ทำเว็บให้มีคนดู |
SELECT * FROM (
SELECT * FROM (
(SELECT @row:=@row+1 AS row,
y.* FROM (SELECT id,topic,relate FROM table_name WHERE id>449 ORDER BY id ASC LIMIT 4) AS y
,(SELECT @row:=0) AS r)
UNION
(SELECT @row2:=@row2+1 AS row2,
y.* FROM (SELECT id,topic,relate FROM table_name WHERE id<449 ORDER BY id DESC LIMIT 4) AS y
,(SELECT @row2:=0) AS r)
) AS Z ORDER BY row LIMIT 4
) AS Z2 ORDER BY id DESC
และ นี่คือผลลัพท์ที่เราต้องการ
row | id | topic | relate |
---|---|---|---|
2 | 451 | ทำเว็บให้มีคนดู (ตอนที่ 7) | ทำเว็บให้มีคนดู |
1 | 450 | ทำเว็บให้มีคนดู (ตอนที่ 6) | ทำเว็บให้มีคนดู |
1 | 398 | ทำเว็บให้มีคนดู (ตอนที่ 4) | ทำเว็บให้มีคนดู |
2 | 220 | ทำเว็บให้มีคนดู (ตอนที่ 3) | ทำเว็บให้มีคนดู |