MYSQL/SQL diğer kayıtları baz alarak işlem yapma

Merhabalar , bu yazımda sizlere Mysql'de son eklenen kayıttaki verinin değerlerine göre yeni bir kayıt eklemeyi göstereceğim.

MYSQL/SQL diğer  kayıtları baz alarak  işlem yapma
Mysql/SQL

Merhabalar , 
bu yazımda sizlere Mysql sorguları yazarken farkettiğim güzel bir sorgu tipinden bahsedeceğim

Karşılaştığım olay , programlama yaparken veritabanına veri ekleyeceğim sırada karşıma çıktı. Diyelim ki biz bir kayıt ekleyeceğiz ve bu kayıt kendi içerisinde gidip tablomuzdaki diğer alanları baz alıp bir işlem yapacak.

Benim ihtiyacım olan şey ekleyeceğim kayıt belirttiğim alanldaki en yüksek değere sahip kayıttan bir adet fazla olmasıydı, programlama yaparken buna erişmemiz için iki ayrı sorgu yazmamız gerekirdi.

Birinci sorgumuz şu şekilde olurdu:
 

Select max(sira) from kategoriler

Bu sorgu sayesinde gidip sira alanı en büyük değeri alırdık sonra ikinci sorgumuzda yani veritabanına kayıt ekleme sorgumuzda gidip ilk sorguda aldığımız değeri bir değişkene aktarıp ona göre işlem yapardık.PHP'den örnek vermek gerekir ise:

$sorgu = $db->prepare("Select max(sira) from kategoriler");
$sorgu->execute();
$enbuyuk = $sorgu->fetch();

$sorgu = $db->prepare("insert into kategoriler (kategori_adi,kategori_sira) values (?,?) ");
$sorgu->execute(["Kategorimiz",$enbuyuk+1]);

Şeklinde olurdu ve gördüğünüz gibi iki kere ayrı sorgu yollardık.
Ancak daha kullanışlı ve işlemleri tek sorguda halletmenin bir yolu var.


Sql sorgumuz:
 

insert into kategoriler (kategori_adi,sira) VALUES ('Kategori adı',(Select max(sira)+1 from kategoriler c))

Gördüğünüz gibi bu sql sorgusu sayesinde tek sorguda işlemimizi halletmiş bulunuyoruz, buna göre SQL'de tek sorguda çoğu uyarlama yapabiliriz.
Burada önemli husus Select sorgusu parantezler içinde olmalı ve aynı INNER JOIN'de olduğu gibi takma ad belirtmemiz gerekmekte ben takma ad olarak 'c' belirledim. Aksi halde sorgunuz çalışmayacaktır.


Kodun PHP uyarlanmış hali:

$sorgu = $db->prepare("insert into kategoriler (kategori_adi,kategori_sira) values (?,(Select max(sira)+1 from categories c)) ");
$sorgu->execute(["Kategori_adi"]);