Kullanıcılarımıza veritabanındaki verileri gösterirken bunu verileri rastgele çekmek isteyebiliriz. Küçük bir veritabanından rastgele veri çekerken yaptığımız sorgu her harikalde hızlı gerçekleşecektir. Fakat büyük bir veri tabanı için aynı şeyi söyleyemeyiz. Yaptığım araştımalar sonucunda veri tabanından rastgele veri çekmek için bulduğum çözümleri sizinle paylaşacağım.

Veri tabanından "yazilar" adlı tablomuzdan 5 adet rastgele veri çekelim.

1. Sorgu

SELECT * FROM yazilar
ORDER BY RAND()
LIMIT 5

Bu sorguyu çalıştırdığımda en hızlı gerçekleştiği süre 0.006 ms oldu.

2.Sorgu

SELECT * FROM yazilar
WHERE id IN (SELECT id FROM yazilar)
ORDER BY RAND() 
LIMIT 5

Bu sorguda ise en hızlı gerçekleşme süresi 0.005 ms oldu.

3.Sorgu

SELECT * FROM yazilar AS y1 
INNER JOIN (SELECT ( RAND() * (SELECT MAX(yazi_id) FROM yazilar) ) AS rand_id) AS y2
WHERE y1.yazi_id >= y2.rand_id
LIMIT 5

Bu sorguda ise en hızlı gerçekleşme süresi 0.001 ms oldu.

PHP dizileri kullanarak rastgele veri çekme

Veritabanından rastgele veri çekerken php'de dizileri kullanacağız. Bu yöntemde izleyeceğimiz yolu sizlere vermek istiyorum.

  • İlk olarak yazilar tablosundan bütün id leri çeken bir sorgu yap
  • Sorgu sonucunda gelen bütün idleri bir diziye at
  • Dizi içerisinden rastgele id seç
  • Dizide rastgele seçilen idleri sql sorgusu içerisinde "... WHERE IN ($rastgele_id)" şeklinde yerleştir.
  • Son olarak oluşan sql cümlesini sorguluyoruz.

Aşağıdaki kod veri tabanından rastgele 5 adet veri çeker.

<?php
	$baglan = mysql_connect('localhost', 'kullanici', 'parola');
	mysql_select_db('veri_tabani_adi', $baglan);

	$sql = 'SELECT id FROM yazilar';
	$query = mysql_query($sql);

	while( $row = mysql_fetch_array($query) )
	{
		$id[] = $row['id'];
	}

	$id = array_flip($id); // Dizideki anahtarlar ve degerleri yer değiştir
	$rastgele_id = array_rand($id, 5); //diziden rastgele 5 adet anahtar seç
	$rastgele_id = implode(',',$rastgele_id);

	$sql1 = 'SELECT * FROM yazilar WHERE id IN(' .$rastgele_id. ')';
	$query1 = mysql_query($sql1);

	while( $row1 = mysql_fetch_array($query1) )
	{
		echo $row1['id'].'<br>';
	}
?>

Benim bulduğum çözümler bunlar daha iyi bir fikri olan varsa paylaşırsa sevinirim.

İyi kodlamalar :).