Veritabanındaki bir tablodan nasıl rastgele satır(lar) seçerim?

Ürünlerin arasından bir kaç tanesini rastgele göstermek istiyorsunuz ya da makalelerinizin hep aynı sırada çıkmasını istemiyorsunuz. Aşağıda bir kaç değişik veritabanında nasıl rastgele satır(lar) çağırabileceğinizi gösteren kod örnekleri var. Aşağıdaki yöntemleri kullanırken çok fazla kayıt olan tablolardan veri çekerken performans problemleriyle karşılaşabilirsiniz. Rastgele alan anlık olarak yaratıldığından ORDER ya da WHERE şartlarını kullandığınızda indeks olmayan bir alanda sorgu yaptığınız için tablodaki satır miktarı ne kadar fazlaysa performans o kadar düşecektir. Aklınızın bir köşesinde bulunsun.

SQLite

SELECT sutun FROM tablo
 WHERE rowid >= (abs(random()) % (SELECT max(rowid) FROM tablo))
 LIMIT 5;

MSSQL

SELECT TOP 5 sutun FROM tablo
 ORDER BY NEWID()

MySQL

SELECT sutun FROM tablo
 ORDER BY RAND()
 LIMIT 1

ORACLE

SELECT sutun FROM
  (SELECT sutun FROM tablo
    ORDER BY dbms_random.value )
 WHERE rownum = 1

PostgreSQL

SELECT sutun FROM tablo
 ORDER BY RANDOM()
 LIMIT 1

IBM DB2

SELECT sutun FROM tablo
 ORDER BY RAND()
 FETCH FIRST 1 ROWS ONLY

Şurada PHP ve MySQL için rastgele satır seçimi konusunda alternatif bir çözüm var. Ben de örnekteki kodu temel alarak şöyle bir kod ürettim.

< ?php
/*
* Fonksiyon      : rastgeleSatir
*
* Geliştirici   : İzzet Emre Erkan , 
* URL            : https://www.karalamalar.net
*       
* Versiyon      : 1.0
* Tarih          : 09.05.2007
* Amaç           : MySQL veritabanı kullanarak belli bir tablodan rastgele bir satır döndürmek
*
* Parametreler
*  $tablo        : Veri çekilecek olan tablo
*  $rowid        : Tablodaki satır tanımlayıcı otomatik artan sütun
*  $secilecekler : (Seçime bağlı) Fonksiyonun döndüreceği satırda seçilecek sütunlar.
*                  (Parametre belirtilmezse tüm sütunlar döner.)
*/
function rastgeleSatir($tablo, $rowid, $secilecekler = "*") {
	$maks = mysql_result(mysql_query("SELECT max($rowid) FROM $tablo"),0,0);
	$rastgeleSayi = mt_rand(1,$maks);
	$rastgeleSatir = mysql_fetch_array(mysql_query("SELECT $secilecekler FROM $tablo WHERE $rowid >= $rastgeleSayi ORDER BY $rowid ASC LIMIT 1"));
	if(!is_array($rastgeleSatir))
		$rastgeleSatir = mysql_fetch_array(mysql_query("SELECT $secilecekler FROM $tablo WHERE $rowid < $rastgeleSayi ORDER BY $rowid DESC LIMIT 1"));
	return $rastgeleSatir;
}
?>

Kullanımı

< ?php
// Tüm sütunlarla beraber rastgele bir satır döndürmek için
print_r(rastgeleSatir("tablo_adi", "tanimlayici_sutun"));

// Belirli sütunlarla beraber rastgele bir satır döndürmek için
print_r(rastgeleSatir("tablo_adi", "tanimlayici_sutun", "sutun1, sutun2, sutun3"));
?>

Gettext ile PHP uygulamalarınıza çoklu dil desteği

Aziz Nesin‘in “Parle Vu Fransızca” adlı bir öyküsü vardır. Şuradan öğrendiğime göre “İnsanlar Uyanıyor” adlı kitabında yer alıyor bu öykü. Öykünün kısa bir özetini geçeyim sizlere.

İstanbul’da Fransız bir bayan, yardımcı olabileceği düşüncesiyle trafik polisine adres danışır. Sen misin danışan. Yardımsever trafik polisi kendisi fransızca bilmediği için yoldan çevirdiği insanlardan yardım ister. Turist bir kere yakayı kaptırmıştır. Polis sorunu çözmeden bayanı bırakmak istemez. Çaresizce sokakta fransızca bilen birilerini aramaktadır. İşler çığırından çıkar, polisin ve bayanın çevresi kalabalıklaşır, insanlar kalabalığı gördükçe meraktan daha fazla toplanmaya başlarlar. Olaylar gelişir…
Okumaya devam et Gettext ile PHP uygulamalarınıza çoklu dil desteği

PHP ile uygulama geliştirmek – Bölüm 2

Kendinizi hazır hissediyorsanız başlayalım…

Bu makale <?PHP echo “Merhaba Türkiye”; ?> gruplarında yazmaya başladığım PHP ile uygulama geliştirmek yazı dizisinin ikinci bölümüdür. Halen gelecek vaat etmeyebileceği konusunda ısrarcıyım. Taslaktır, geliştirilebilir.

Bir önceki yazıda PHP geliştirmek için gerekli ortamı nasıl hazırlayabileceğinizden bahsetmiştim. Eğer ortamınız hazırsa ufak ufak başlayalım.

PHP’ nin tarihçesi, ne olduğu konusunda pek bir şey yazmayı planlamıyorum. Bunun gibi basit bir sorguyla bile bir çok sonuca ulaşabilirsiniz. Ayrıca temel HTML bilgisine ve az buçuk da javascript ve benzeri istemci taraflı diller hakkında bilgi sahibi olduğunuzu varsayıyorum. Zaten bunlar olmadan bu noktadan ileriye gitmeniz pek de işinize yaramayacaktır. Okumaya devam et PHP ile uygulama geliştirmek – Bölüm 2

Türkçe karakterlerle ilgili php sınıfı (class) strtrfunc

Uygulamalarımızda string manipulation dediğimiz metin değerlerin şekillendirilmesinde kullanılan bazı fonksiyonlar vardır. PHP’nin dahili fonksiyonları malesef Türkçe karakterlerle (ğüşıöç-ĞÜŞİÖÇ) uyumlu çalışmıyor. Geliştirdiğim uygulamalarda kullandığım bazı fonksiyonları bir araya topladım ve bir sınıf (class) haline getirdim. Bunu da sizlerle paylaşayım dedim. Okumaya devam et Türkçe karakterlerle ilgili php sınıfı (class) strtrfunc

PHP ile uygulama geliştirmek – Bölüm 1

PHP ile uygulama geliştirmek istiyorsunuz ama nereden başlayacaksınız?

Bu makale <?PHP echo “Merhaba Türkiye”; ?> gruplarında yazmaya başladığım PHP ile uygulama geliştirmek yazı dizisinin birinci bölümüdür. Gelecek vaad etmeyebilir. Taslaktır, geliştirilebilir.

Öncelikle uygulama geliştirebilmeniz için bir geliştirme ortamına ihtiyacımız var. PHP dilinden anlayan bir web sunucusuna ihtiyacımız olacak. Bunun için IIS ya da Apache kullanabilirsiniz. Daha sonra gelişmiş uygulamalar geliştirmek için bir veritabanı sunucusuna ihtiyacınız olacak. Bunun için de ücretsiz ve açık kaynak kodlu sunuculardan PostgreSQL ya da MySQL kullanabilirsiniz. Oracle Express ya da Microsoft SQL Server 2005 Express Edition ile ücretli rdbms (İlişkisel veritabanı yönetim sistemleri) üzerinde uygulama geliştirme imkanlarını test edebilirsiniz.

Elinizde hazır bir geliştirme ortamı yoksa tüm bu programların kurulması ve birbirleriyle uyumlu bir şekilde çalışması için çok uğraşmanız gerekebilir ya da XAMPP vb. hazır uygulamalar ile yolunuza devam edebilirsiniz. Benim tavsiyem XAMPP kurun. Pakete dahil olan uygulamalar bir başlangıç yapmanız için (ve belki de daha fazlası için) yeterli düzeyde. Kendinizi geliştirdikçe istediğiniz uygulamaları istediğiniz ince ayarlarla kurmayı öğrenir ve istediğiniz şekilde çalışırsınız.

Yine de programlarımı kendim kurar kendim kontrol ederim diye ısrar ediyorsanız şöyle bir kaynak önerebilirim. (Kaynağı hazırlayan Huseyin Tufekcilerli‘ye de teşekkür etmeyi unutmayalım.)

Geliştirme ortamını hazırlamak için size biraz süre tanıyayım sonra kaldığımız yerden devam edelim.