SELECT
Bir MySQL tablosundaki son satırı nasıl alabilirim ?
Ben INSERT
veri ing ve önceki satırdan bir sütun değeri almanız gerekiyor.
Bir var auto_increment
tabloda.
auto_increment
var. En son eklenenleri istiyorum.
SELECT
Bir MySQL tablosundaki son satırı nasıl alabilirim ?
Ben INSERT
veri ing ve önceki satırdan bir sütun değeri almanız gerekiyor.
Bir var auto_increment
tabloda.
auto_increment
var. En son eklenenleri istiyorum.
Yanıtlar:
Evet, orada bir otomatik_arama var
Tablodaki tüm satırların sonunu istiyorsanız , o zaman bu nihayet MAX(id)
doğru cevap zamanı ! Türü:
SELECT fields FROM table ORDER BY id DESC LIMIT 1;
id
Dizine eklenmişse değil .
İlişkisel veritabanlarındaki tabloların yalnızca satır kümesi olduğunu unutmayın. Ve matematikteki kümeler sıralanmamış koleksiyonlardır. İlk veya son satır yok; önceki satır veya sonraki satır yok.
Sırasız satır kümenizi önce bir alana göre sıralamanız gerekir ve ardından yinelemeyi sonuç kümesinde tanımladığınız sırayla serbest bırakırsınız.
Otomatik artan bir alanınız olduğundan, bunun sıralama alanı olmasını istediğinizi varsayalım. Bu durumda, aşağıdakileri yapmak isteyebilirsiniz:
SELECT *
FROM your_table
ORDER BY your_auto_increment_field DESC
LIMIT 1;
Sırasız sıralar dizisini your_auto_increment_field
(veya adını verdiğiniz her şeyi) azalan sırada nasıl sıraladığımızı görün. Sonra sonuç kümesini yalnızca ilk satıra sınırlandırırız LIMIT 1
.
@Spacepille tarafından önerilen iki sorguyu aşağıdaki gibi görünen tek bir sorguda birleştirebilirsiniz:
SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);
Hızlı bir şekilde çalışmalıdır, ancak INNODB tablolarında milisaniyenin bir kesimi ORDER + LIMIT'ten daha yavaştır.
answered Jun 14 at 9:41
thats yaklaşık 1 yıl 6 ay önce :)
birçok satır içeren tablolarda muhtemelen daha hızlı iki sorgu vardır ...
SELECT @last_id := MAX(id) FROM table;
SELECT * FROM table WHERE id = @last_id;
Basitçe kullanın: PDO::lastInsertId
Hemen hemen her veritabanı tablosunda bir auto_increment sütunu vardır (genellikle id)
Tablodaki tüm satırların sonuncusunu istiyorsanız,
SELECT columns FROM table ORDER BY id DESC LIMIT 1;
VEYA
İki sorguyu aşağıdaki gibi görünen tek bir sorguda birleştirebilirsiniz:
SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);
SELECT * FROM adds where id=(select max(id) from adds);
Bu sorgu tablonuzdaki son kaydı almak için kullanılır.
Buradaki birçok yanıt aynı (otomatik artışınıza göre sırala) diyor ki, dizin oluşturulmuş otomatik büyütülmüş bir sütununuz varsa sorun yok.
Eğer böyle bir alan var ve eğer bir yan not, bir birincil anahtar, kullanmak için hiçbir performans cezası yoktur order by
karşısında select max(id)
. Birincil anahtar, verilerin veri tabanı dosyalarında nasıl sipariş edildiğidir (en azından InnoDB için) ve RDBMS, verilerin nerede bittiğini bilir ve order by id + limit 1
erişim ile aynı olacak şekilde optimize edebilirmax(id)
Artık daha az seyahat edilen yol, otomatik büyütülmüş bir birincil anahtarınız olmadığı zamandır. Belki birincil anahtar, 3 alanın bir bileşimi olan doğal bir anahtardır ... Yine de hepsi kaybolmaz. Bir programlama dilinden önce ile satır sayısını elde edebilirsiniz.
SELECT Count(*) - 1 AS rowcount FROM <yourTable>;
ve sonra LIMIT
madde içinde elde edilen sayıyı kullanın
SELECT * FROM orderbook2
LIMIT <number_from_rowcount>, 1
Maalesef, MySQL LIMIT
yan tümcesinde bir alt sorguya veya kullanıcı değişkenine izin vermeyecektir