ฉันจะSELECT
แถวสุดท้ายในตาราง MySQL ได้อย่างไร
ฉันกำลังINSERT
ส่งข้อมูลและฉันจำเป็นต้องดึงค่าคอลัมน์จากแถวก่อนหน้า
มีauto_increment
ในตาราง
auto_increment
อยู่ในนั้น ฉันต้องการที่เพิ่มเข้ามาล่าสุด
ฉันจะSELECT
แถวสุดท้ายในตาราง MySQL ได้อย่างไร
ฉันกำลังINSERT
ส่งข้อมูลและฉันจำเป็นต้องดึงค่าคอลัมน์จากแถวก่อนหน้า
มีauto_increment
ในตาราง
auto_increment
อยู่ในนั้น ฉันต้องการที่เพิ่มเข้ามาล่าสุด
คำตอบ:
ใช่มี auto_increment อยู่ในนั้น
หากคุณต้องการสุดท้ายของแถวทั้งหมดในตารางจากนั้นในที่สุดก็ถึงเวลาที่MAX(id)
คำตอบที่ถูกต้อง! ชนิด:
SELECT fields FROM table ORDER BY id DESC LIMIT 1;
id
จัดทำดัชนี
โปรดทราบว่าตารางในฐานข้อมูลเชิงสัมพันธ์เป็นเพียงชุดของแถว และเซตในวิชาคณิตศาสตร์เป็นคอลเล็กชั่นที่ไม่ได้เรียงลำดับ ไม่มีแถวแรกหรือแถวสุดท้าย ไม่มีแถวก่อนหน้าหรือแถวถัดไป
คุณจะต้องเรียงลำดับแถวที่ไม่เรียงลำดับของคุณตามบางฟิลด์ก่อนจากนั้นคุณจะทำซ้ำได้อย่างอิสระผ่านชุดผลลัพธ์ตามลำดับที่คุณกำหนด
เนื่องจากคุณมีฟิลด์การเพิ่มโดยอัตโนมัติฉันถือว่าคุณต้องการให้เป็นฟิลด์การเรียงลำดับ ในกรณีนั้นคุณอาจต้องการทำสิ่งต่อไปนี้:
SELECT *
FROM your_table
ORDER BY your_auto_increment_field DESC
LIMIT 1;
ดูว่าเราเรียงลำดับชุดแถวที่ไม่เรียงลำดับแรกอย่างไรตามลำดับyour_auto_increment_field
(หรือสิ่งที่คุณเรียก) ในลำดับถัดลงมา จากนั้นเราจะ จำกัด resultset LIMIT 1
ไปเพียงแถวแรกด้วย
คุณสามารถรวมแบบสอบถามสองรายการที่แนะนำโดย @spacepille เป็นแบบสอบถามเดียวที่มีลักษณะดังนี้:
SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);
มันควรจะทำงานอย่างรวดเร็ว แต่ในตาราง INNODB นั้นเศษเสี้ยวของ milisecond ช้ากว่า ORDER + LIMIT
answered Jun 14 at 9:41
นั่นประมาณ 1 ปีและ 6 เดือนก่อนหน้านี้ :)
ในตารางที่มีหลายแถวสองแบบสอบถามอาจเร็วกว่า ...
SELECT @last_id := MAX(id) FROM table;
SELECT * FROM table WHERE id = @last_id;
ใช้งานง่าย: PDO::lastInsertId
หากคุณต้องการเพิ่มครั้งล่าสุดให้เพิ่มการประทับเวลาและเลือกเรียงลำดับในลำดับย้อนกลับตามการประทับเวลาสูงสุดขีด จำกัด 1 หากคุณต้องการไปตาม ID ให้เรียงลำดับตาม ID mysql_insert_id
หากคุณต้องการที่จะใช้อย่างใดอย่างหนึ่งที่คุณเพิ่มเพียงใช้
เกือบทุกตารางฐานข้อมูลมีคอลัมน์ auto_increment (โดยทั่วไปคือ id)
หากคุณต้องการสุดท้ายของแถวทั้งหมดในตาราง
SELECT columns FROM table ORDER BY id DESC LIMIT 1;
หรือ
คุณสามารถรวมแบบสอบถามสองรายการเป็นแบบสอบถามเดียวที่มีลักษณะดังนี้:
SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);
SELECT * FROM adds where id=(select max(id) from adds);
แบบสอบถามนี้ใช้เพื่อดึงข้อมูลระเบียนสุดท้ายในตารางของคุณ
คำตอบมากมายที่นี่พูดเหมือนกัน (เรียงตามการเพิ่มอัตโนมัติของคุณ) ซึ่งก็โอเคหากคุณมีคอลัมน์การสร้างอัตโนมัติที่มีการทำดัชนี
สังเกตด้านบนถ้าคุณมีข้อมูลดังกล่าวและจะเป็นคีย์หลักจะไม่มีการลงโทษประสิทธิภาพสำหรับการใช้เมื่อเทียบกับorder by
select max(id)
คีย์หลักคือวิธีการสั่งซื้อข้อมูลในไฟล์ฐานข้อมูล (สำหรับ InnoDB เป็นอย่างน้อย) และ RDBMS รู้ว่าข้อมูลนั้นสิ้นสุดลงที่ใดและสามารถปรับให้เหมาะสมorder by id + limit 1
ให้กับการเข้าถึงmax(id)
ตอนนี้ถนนที่เดินทางน้อยลงคือเมื่อคุณไม่มีคีย์หลักที่สร้างขึ้นโดยอัตโนมัติ บางทีคีย์หลักอาจเป็นคีย์ธรรมชาติซึ่งประกอบไปด้วย 3 ฟิลด์ ... ไม่ใช่ทั้งหมดที่หายไป จากภาษาการเขียนโปรแกรมคุณสามารถรับจำนวนแถวด้วย
SELECT Count(*) - 1 AS rowcount FROM <yourTable>;
จากนั้นใช้หมายเลขที่ได้รับในLIMIT
ข้อ
SELECT * FROM orderbook2
LIMIT <number_from_rowcount>, 1
น่าเสียดายที่ MySQL จะไม่อนุญาตให้มีคิวรีย่อยหรือตัวแปรผู้ใช้ในLIMIT
ข้อ
คุณสามารถใช้OFFSET
ในLIMIT
คำสั่ง:
SELECT * FROM aTable LIMIT 1 OFFSET 99
ในกรณีที่ตารางของคุณมี 100 แถวจะส่งคืนแถวสุดท้ายโดยไม่ต้องพึ่งพา primary_key