Bu yazımda veritabanını üzerinde tuttuğumuz verilerde kullanabileceğimiz sorgulamalardan olan ve biraz karmaşık olan "Son Yorumlananlar" sorgulamasından bahsedeceğim. Bu konuya değinme nedenim ise kendi bloğumda da daha önce bu konuyla ilgili sorun yaşamam ve bu sorunu geçenlerde sitemi güncellerken çözmemdir. Sitemde yer alan son yorumlanan yazılar kısmında yazılar yorumlanma sırasına göre çıkmıyordu. Ayrıca tablolar arası ilişkide de
where in komutu kullanıyordum. Bunun yerine
join komutu kullandım ve bu komutun
where in komutuna göre çok hızlı çalıştığını gördüm. Şu anda bloğumda yer alan son yorumlanan yazılar bölümü doğru biçimde çalışmaktadır. Şimdi bu sorgulamayı nasıl yapacağımıza bakalım.
Öncelikle bu sorgulamayı mysql veritabanı ile yaptığımı ve vereceğim örnekte de mysqlde kullandığım sorgulamayı vereceğimi belirtmek isterim. Örnekte kullandığım tablolar ve sonuç bilgisi aşağıdaki gibi olacak.
Bu tabloya göre son yorumlanan yazıların sorgulamak için kullanacağımız sql sorgulaması ise aşağıdaki gibi olmalı.
select sorgu4.yazi_id,sorgu4.yazi_baslik from yazilar as sorgu4
join (select yazi_id from
(select max(yorum_id),yazi_id from
(select * from yorumlar order by yorum_id desc) as sorgu1
group by yazi_id order by yorum_id desc limit 4) as sorgu2)
as sorgu3
on sorgu4.yazi_id=sorgu3.yazi_id;
Görüldüğü gibi sorgumuz biraz karmaşık görünse de oldukça basit bir sorgulama. Sorgumuzda en önemli nokta ise
join komutu diyebilirim. Aslında bu komut yerine
where in komutu da kullanılabilirdi. Ancak yaptığm örneklerde gördümki
join komutu
where in komutuna göre oldukça hızlı çalışıyor. Bu iki komut arasındaki farkı başka bir yazımda paylaşmak istiyorum.
Bu sorgulama mysql veritabanı ile yaptığım bir sorgulama. Ms sql için denemedim ama çalışacağını düşünüyorum.
Ayrıca yukarıda vermiş olduğum resimde tüm veriler gözükmediğinden sonuç sorgulamasında elde ettiğimiz farklılık bundan kaynaklanıyor.
Not : Sorgulamamız yeterli sayıda veri olduğunda sorunsuz çalışmakta iken az sayıda veri üzerinde elde ettiğimiz bilgilerin sırasında farklılık oluyor. Bunun nedenini bulamadım ama yeterli sayıda veri üzerinde sorgumuz başarılı bir biçimde çalışmaktadır.
İyi Çalışmalar.