Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

จะค้นหาระเบียนก่อนหน้าและถัดไปโดยใช้แบบสอบถามเดียวใน MySQL ได้อย่างไร


คุณสามารถใช้ UNION เพื่อรับระเบียนก่อนหน้าและถัดไปใน MySQL

ไวยากรณ์มีดังนี้

(เลือก *จาก yourTableName WHERE yourIdColumnName> yourValue ORDER BYyourIdColumnName ASC LIMIT 1)UNION(เลือก *จาก yourTableName WHERE yourIdColumnName  

เพื่อให้เข้าใจแนวคิด ให้เราสร้างตาราง แบบสอบถามเพื่อสร้างตารางมีดังนี้

mysql> สร้างตาราง PreviousAndNextRecordDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Name varchar(30) -> );Query OK, 0 แถวได้รับผลกระทบ (1.04 วินาที)

แทรกบางระเบียนในตารางโดยใช้คำสั่ง insert

แบบสอบถามมีดังนี้

mysql> แทรกลงในค่าของ PreviousAndNextRecordDemo(Name)('John');Query OK, 1 แถวที่ได้รับผลกระทบ (0.17 วินาที)mysql> แทรกลงในค่า PreviousAndNextRecordDemo(Name)('Sam');Query OK, 1 แถวได้รับผลกระทบ ( 0.15 วินาที) mysql> แทรกลงในค่า PreviousAndNextRecordDemo (ชื่อ) ('Carol'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.14 วินาที) mysql> แทรกลงในค่าก่อนหน้า AndNextRecordDemo (ชื่อ) ('Bob'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ ( 0.17 วินาที) mysql> แทรกลงในค่า PreviousAndNextRecordDemo (ชื่อ) ('Larry'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.20 วินาที) mysql> แทรกลงในค่าก่อนหน้า AndNextRecordDemo (ชื่อ) ('David'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ ( 0.14 วินาที) mysql> แทรกลงในค่าก่อนหน้า AndNextRecordDemo (ชื่อ) ('Ramit'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.12 วินาที) mysql> แทรกลงในค่าก่อนหน้า AndNextRecordDemo (ชื่อ) ('Maxwell'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ ( 0.15 วินาที) mysql> แทรกลงในค่าก่อนหน้า AndNextRecordDemo (ชื่อ) ('ไมค์'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.14 วินาที) mysql> แทรกลงในค่าก่อนหน้า AndNextRecordDemo (ชื่อ) ('Robert'); แบบสอบถามตกลง 1 r ow ได้รับผลกระทบ (0.19 วินาที) mysql> แทรกลงในค่า PreviousAndNextRecordDemo (ชื่อ) ('Chris'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.10 วินาที) mysql> แทรกลงในค่า PreviousAndNextRecordDemo (ชื่อ) ('James'); แบบสอบถามตกลง 1 แถวที่ได้รับผลกระทบ (0.16 วินาที)mysql> แทรกลงในค่าก่อนหน้า AndNextRecordDemo (ชื่อ) ('Jace'); แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.15 วินาที)

แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select

แบบสอบถามมีดังนี้

mysql> เลือก *จาก PreviousAndNextRecordDemo;

ต่อไปนี้เป็นผลลัพธ์

<ก่อนหน้า>+----+---------+| รหัส | ชื่อ |+----+---------+| 1 | จอห์น || 2 | แซม || 3 | แครอล || 4 | บ๊อบ || 5 | แลร์รี่ || 6 | เดวิด || 7 | รมิท || 8 | แม็กซ์เวลล์ || 9 | ไมค์ || 10 | โรเบิร์ต || 11 | คริส || 12 | เจมส์ || 13 | Jace |+----+---------+13 แถวในชุด (0.00 วินาที)

นี่คือแบบสอบถามเพื่อรับระเบียนก่อนหน้าและถัดไปโดยใช้แบบสอบถามเดียวกับ UNION

mysql> (เลือก *จาก PreviousAndNextRecordDemo WHERE Id> 8 ORDER BY Id ASC LIMIT 1) -> UNION -> (เลือก *from PreviousAndNextRecordDemo WHERE Id <8 ORDER BY Id DESC LIMIT 1);

ต่อไปนี้เป็นผลลัพธ์

<ก่อนหน้า>+----+-------+| รหัส | ชื่อ |+---+-------+| 9 | ไมค์ || 7 | Ramit |+----+-------+2 แถวในชุด (0.03 วินาที)