เช่นเดียวกับ @James พูดว่ามันจะสั่งระเบียนทั้งหมดแล้วรับ 20 แถวแรก
ด้วยเหตุนี้คุณจึงมั่นใจได้ว่าจะได้รับ 20 บทความแรกที่เผยแพร่แล้วบทความใหม่จะไม่ปรากฏ
ในสถานการณ์ของคุณผมขอแนะนำให้คุณเพิ่มdesc
ไป order by publish_date
ถ้าคุณต้องการบทความใหม่ล่าสุดแล้วบทความใหม่ล่าสุดจะเป็นครั้งแรก
หากคุณต้องการให้ผลลัพธ์เรียงจากน้อยไปมากและยังต้องการเพียง 10 บทความใหม่ล่าสุดคุณสามารถขอให้ mysql เรียงลำดับผลลัพธ์ของคุณสองครั้ง
แบบสอบถามด้านล่างนี้จะเรียงลำดับผลลัพธ์จากมากไปน้อยและ จำกัด ผลลัพธ์ไว้ที่ 10 (นั่นคือแบบสอบถามภายในวงเล็บ) มันจะยังคงเรียงลำดับจากมากไปน้อยและเราไม่พอใจกับสิ่งนั้นดังนั้นเราจึงขอ mysql เพื่อจัดเรียงอีกครั้ง ตอนนี้เรามีผลลัพธ์ใหม่ล่าสุดในแถวสุดท้าย
select t.article
from
(select article, publish_date
from table1
order by publish_date desc limit 10) t
order by t.publish_date asc;
หากคุณต้องการคอลัมน์ทั้งหมดก็จะทำเช่นนี้:
select t.*
from
(select *
from table1
order by publish_date desc limit 10) t
order by t.publish_date asc;
ฉันใช้เทคนิคนี้เมื่อฉันเขียนแบบสอบถามด้วยตนเองเพื่อตรวจสอบฐานข้อมูลสำหรับสิ่งต่าง ๆ ฉันไม่ได้ใช้ในสภาพแวดล้อมการผลิต แต่ตอนนี้เมื่อฉันทำเครื่องหมายไว้การเรียงลำดับพิเศษจะไม่ส่งผลต่อประสิทธิภาพ
publish_date
มีค่าเท่ากันการเรียงลำดับโดยพวกเขาจะไม่ให้ผลลัพธ์ที่แน่นอนซึ่งหมายความว่าหากคุณใช้LIMIT
การแบ่งหน้าคุณอาจจบลงด้วยการได้รับไอเท็มเดียวกันในหน้าต่างๆ!