แถวใดที่ส่งคืนเมื่อใช้ LIMIT กับ OFFSET ใน MySQL


140

ในแบบสอบถามด้านล่าง:

SELECT column 
FROM table
LIMIT 18 OFFSET 8

เราจะได้ผลลัพธ์เป็นจำนวนเท่าไรจากผลลัพธ์ไปยังที่ใด


คำสั่งซื้อจะต้องมีขีด จำกัด ก่อนจากนั้นจึงทำการ OFFSET ถ้าไม่มันจะโยนข้อผิดพลาด
Mouser

คำตอบ:


189

จะให้ผลลัพธ์ 18 รายการโดยเริ่มจากการบันทึก # 9 และสิ้นสุดในการบันทึก # 26

offsetเริ่มต้นด้วยการอ่านการสอบถามจาก ก่อนอื่นคุณชดเชยด้วย 8 ซึ่งหมายความว่าคุณข้ามผลลัพธ์ 8 รายการแรกของแบบสอบถาม จากนั้นคุณ จำกัด จำนวน 18 ซึ่งหมายความว่าคุณพิจารณาระเบียน 9, 10, 11, 12, 13, 14, 15, 16 .... 24, 25, 26 ซึ่งรวมทั้งหมด 18 รายการ

ตรวจสอบนี้ออก

และยังเป็นเอกสารอย่างเป็นทางการ


คุณถูกต้องมีความแตกต่างใด ๆ b / w จำกัด 8,18 และ จำกัด 18 offset 8
Arun Killu

26
ไม่เหมือนกัน LIMIT 8, 18เป็นเพียงช็อตคัต :)
Mosty Mostacho

1
คำตอบที่ดีที่สุดที่ผมก็ยังสับสนผมคิดว่ามันส่งกลับข้อมูลระหว่างตัวเลขสองหลัก แต่ตอนนี้ชัดเจน :)
MR_AMDEV

47

OFFSET ไม่มีอะไรนอกจากคำหลักเพื่อระบุเคอร์เซอร์เริ่มต้นในตาราง

SELECT column FROM table LIMIT 18 OFFSET 8 -- fetch 18 records, begin with record 9 (OFFSET 8)

คุณจะได้รับแบบฟอร์มผลลัพธ์เดียวกัน

SELECT column FROM table LIMIT 8, 18

การแสดงภาพ ( Rเป็นหนึ่งระเบียนในตารางในบางลำดับ)

 OFFSET        LIMIT          rest of the table
 __||__   _______||_______   __||__
/      \ /                \ /
RRRRRRRR RRRRRRRRRRRRRRRRRR RRRR...
         \________________/
                 ||
             your result

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.