Bu yazımda sizlere MySQL' de bulunan bir tablodaki en son kaydın id değerini almak için yöntemlerden bir tanesini anlatacağım.

Peki bu bize ne zaman lazım olur? Mesela bir sipariş kaydettiniz ve hemen ardından bu siparişe ait ürünleri başka bir tabloya kaydetmeniz gerekiyor. Ürünleri kaydederken siparişin id değerine ihtiyacınız var. İşte bu gibi durumlarda son kaydın id değerini almamız gerekir.

öncelikle tablo yapımız ve veriler.

üstteki gibi bir tablo yapısında

$sorgu = mysql_query("select icerik_id from icerik ORDER BY icerik_id DESC LIMIT 1");
if($sorgu)
{
$sorgu_sonuc = mysql_fetch_assoc($sorgu);
echo "Son Kaydın İd Değeri :: ". $sorgu_sonuc["icerik_id"];
}

kodların açıklamasını yapacak olursak,

select icerik_id from icerik ORDER BY icerik_id DESC LIMIT 1

ifadesi icerik tablosundaki tüm kayıtları icerik_id alanına göre tersten sıralar,
limit ifadesi ile bu sıralamadan sadece ilk kaydı alır.
select icerik_id ile de bu kaydın icerik_id alanını bize verir.

Yani DESC ile büyükten küçüğe sıraladığımız için en büyük id en üste geliyor, LIMIT 1 ile de sadece o kaydı alıyoruz. id alanı otomatik artan (auto increment) olduğu için en büyük id aynı zamanda en son eklenen kayıt oluyor.

Aynı işlemi MAX() fonksiyonu ile de yapabilirsiniz.

select MAX(icerik_id) as son_id from icerik

PDO ile kullanımı

Burada bir uyarı yapayım, yukarıdaki örnekte kullandığımız mysql_query ve mysql_fetch_assoc fonksiyonları php 7 ile birlikte kaldırıldı. Güncel php sürümlerinde bu kodlar çalışmaz. Bunun yerine PDO kullanmanızı tavsiye ederim. Aynı sorgunun PDO ile yazılmış hali aşağıdaki gibidir.

$sorgu = $pdo->query("select icerik_id from icerik ORDER BY icerik_id DESC LIMIT 1");
$sonuc = $sorgu->fetch(PDO::FETCH_ASSOC);
echo "Son Kaydın İd Değeri :: ". $sonuc["icerik_id"];

Eğer kaydı yeni eklediyseniz ve hemen o kaydın id değerini almak istiyorsanız PDO nun lastInsertId() metodu daha doğru bir yöntemdir.

$pdo->exec("insert into icerik (baslik) values ('yeni içerik')");
echo "Eklenen Kaydın İd Değeri :: ". $pdo->lastInsertId();

Neden daha doğru? Çünkü aynı anda birden fazla kullanıcı kayıt ekliyorsa ORDER BY ile aldığınız son id başka bir kullanıcının eklediği kayda ait olabilir. lastInsertId() ise sadece sizin bağlantınız üzerinden eklenen kaydın id değerini verir.