En çok konu açan ilk 10 sıralamak.
<?php
$stat = array(); //while dışında da ulaşabilmek için
$cekBaba = mysql_query("SELECT * FROM uye"); //tüm üye kolonlarını çek
while($satir = mysql_fetch_array($cekBaba)){ //her dönüşte bir satır aşağı in
$uyeId = $satir['uye_id']; //uye id
$say = mysql_query("SELECT uye_id FROM konu WHERE uye_id = '{$uyeId}'"); //uye_id'si $uyeId olan tüm satırları diz
$stat[$uyeId] = mysql_num_rows($say); //kaç tane satır var onları say ve $stat[uyeId] = uyeId'sinin kaç tane konu açtığının sayısını ekle
}
arsort($stat); //değeleri(mysql_num_rows($say)) büyükten küçüğe sıralar ve $stat[$uyeId] bu kısmı ellemez.
$ilk10 = array_slice($stat,0,10,true); //ilk 10 u alır
var_dump($ilk10);
?>
Php
Yararli bir bilgi olmus elime saglik. Web sitelerinde sitenin enleri gibi bolum olusturmak isteyenler kullanabilirler.
Php
Mantıklı. Fakat büyük bir sistem için oldukça çok yük bindirir server'a Bunun yerine
uyeler tablosuna "konu_sayisi" adında bir stun koyup. açılan konu için bu stun değerini arttırmak çok daha mantıklı olur. Böylece Tüm üyeleri çekip, o üyelere ait mesajları çekip ondan sonra hesaplamaya ihtiyaç kalmayacaktır. Tek yapmanız gereken
SELECT * FROM uyeler ORDER BY konu_sayisi DESC LIMIT 0,10 dediğiniz anda Bitmiştir. Performans kaybıda yaşamazsınız.
Diğer bir önerimde. Eğerki veri tabanındaki bilgilerin sayısını almak istiyorsanız. bunu Sql deki COUNT() fonksiyonu ile halledin derim. Count fonksiyonu mysqlden veri çekmeden saydırma işlemini yapar ve mysql den php ye sadece istediğiniz sayı gelir. Yani max. 1,2 byte'lık bir bilgi. Fakat Select ile hepsini çekipte, mysql_num_rows ile saydırma işlemini yaparsanız. İstediğiniz tüm veriler php tarafına aktarılmış olur. Ve siz aktarılan satırları saydırmış olursunuz.
unutmamalı ki. Php ve mysql iyi bir ikili olsada, İkisi bir bütün değildir. Aralarında veri aktarımı mevcuttur.
Kolay gelsin.
+10