• 13-03-2010, 16:27:07
    #1
    Edit: THR sayesinde çözülmüştür. kendisine buradan da teşekkür ediyorum

    Merhaba,
    Yazdığım bir scriptte veritabanında siteye yazılan mesajlar tuluyor. aynı tabloda mesajı yazan üyenin id numarası da tutuluyor. Şimdi bu durumda yapmak istediğim olay en çok mesaj yazan 10 kişiyi bulmak. veritabanı tablo yapısı basit olarak şu şekilde düşünülebilir:
    mesajid-yazan üye id-mesaj içeriği

    bu tablo şeklinde en çok mesaj yollayan 10 adet üyeyi nasıl bir mantıkla bulabilirim?

    Yardımcı olacaklara şimdiden çok teşekkürler
  • 13-03-2010, 17:18:19
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Üyeler tablosunda kaç mesaj attığıyla ilgili bir tablonuz var mı? Eğer varsa;
    $sorgu = mysql_query("
    	SELECT uyenick, mesajlar
    	FROM uyeler
    	WHERE mesajlar > 0
    	ORDER BY mesajlar DESC
    	LIMIT 10";
    	
    echo '
    <strong>En Çok Mesaj Atanlar</strong>
    <ol>';
    while ($bilgi = mysql_fetch_assoc($sorgu))
    {
    	echo '
    	<li>',$bilgi['uyenick'],'</li>';
    }
    echo '
    </ol>';
  • 13-03-2010, 17:28:22
    #3
    Hayır, öyle bir istatistik tutmadım. öyle bir istatistik tutmuş olsam zaten iş kolay direk azalan sırayla bir sql sorgusu çekip ilk 10 tanesini yazdırdığımda olay hallolurdu. Benim bu olayı bu şekilde yapmam lazım çünkü başka noktalarda da aynı mantığı kullanmam gerekecek ama oralarda üyeler tablosuna ekleyemeceğim istatistikler olacak. o yüzden üyeler tablosuna mesaj sayıını eklemeden bu tablodan istatistiğini belirlemem lazım
  • 13-03-2010, 17:34:11
    #4
    ZorbAA adlı üyeden alıntı: mesajı görüntüle
    Merhaba,
    Yazdığım bir scriptte veritabanında siteye yazılan mesajlar tuluyor. aynı tabloda mesajı yazan üyenin id numarası da tutuluyor. Şimdi bu durumda yapmak istediğim olay en çok mesaj yazan 10 kişiyi bulmak. veritabanı tablo yapısı basit olarak şu şekilde düşünülebilir:
    mesajid-yazan üye id-mesaj içeriği

    bu tablo şeklinde en çok mesaj yollayan 10 adet üyeyi nasıl bir mantıkla bulabilirim?

    Yardımcı olacaklara şimdiden çok teşekkürler


    $uyeler=mysql_query("select * from uyeler");
    while($kayit=mysql_fetch_object($uyeler))
    {
    	$mesajlar=@mysql_num_rows(mysql_query("select * from mesajlar where uye_id=".$kayit->uyeid));
    	
    	echo $kayit->uye_adi."üyesinin toplam $mesajlar adet mesajı vardır.";
    
    }
    bu şekilde hangi üyenin kaç mesajı olduğunu görebilirsin

    kendine göre ayarlarsan büyük ihtimal çalışacaktır.

    $mesajlar da uye_id yerine mesajlarının olduğu tablodaki üye id sutununun ismini yaz $kayit->uyeid yerine de üyeler tablosundaki üye adını yaz
  • 13-03-2010, 17:38:26
    #5
    @faik_guler hocam çok teşekkürler, aynısını ben de düşündüm ancak şöyle bir sorun var, bu kod bloğu üye sayısı kadar sql sorgusu çalıştıracak bir anda. sitede 5000 tane üye varsa 5000 tane sorguyu tek sayfa çalıştıracaktır. bu da server'da cpu kullanımını vs. tavan yaptırarak sorun yaratmaz mı? Ben böyle düşünerek o yola hiç girmedim yanlışım varsa düzeltirsen sevinirim. sadece benim fikrim bu.
  • 13-03-2010, 17:46:44
    #6
    ZorbAA adlı üyeden alıntı: mesajı görüntüle
    @faik_guler hocam çok teşekkürler, aynısını ben de düşündüm ancak şöyle bir sorun var, bu kod bloğu üye sayısı kadar sql sorgusu çalıştıracak bir anda. sitede 5000 tane üye varsa 5000 tane sorguyu tek sayfa çalıştıracaktır. bu da server'da cpu kullanımını vs. tavan yaptırarak sorun yaratmaz mı? Ben böyle düşünerek o yola hiç girmedim yanlışım varsa düzeltirsen sevinirim. sadece benim fikrim bu.
    o zaman yapman gereken şu olduğunu düşünüyorum

    uyeler tablonda birde mesaj_sayisi diye bişey açıcaksın kişi mesaj yazdıkca mesaj sayısı ilgili üye numarasına göre 1 artıcak mesajı silindiği zaman ise oradan 1 düşücek yani diğer arkadaşın dediği yönteme benzer olucak

    şu anlık başka bi yöntem gelmiyor aklıma
  • 13-03-2010, 17:48:44
    #7
    bence üyeler tablosunda bi sutun aç hem senin için kolay olur ha dersen ki veritabanı dolu onun da kolayı var az önceki sorguya benzer bi komut yazarak orası için güncelleme yaptırırız update komutu ile üyenin mesajlarını bul ve mesajsayisi bölümüne yaz tabi benim yazdığım kod şeklinde bişey istemiyorsan tavan yapacağını düşünüyorsan
  • 13-03-2010, 17:52:13
    #8
    üstad, veritabanının doluğulu hiç sorun değil, onu hallederiz de sorun şurada; ben bu olayı sadece mesaj sayısında kullanmayacağım. üyeler tablosuna ekleyemeceğim şeyler de var. yani bir şekilde en çok olanı bulmam lazım ama yolunu bulamadım işte
  • 13-03-2010, 17:58:22
    #9
    ZorbAA adlı üyeden alıntı: mesajı görüntüle
    üstad, veritabanının doluğulu hiç sorun değil, onu hallederiz de sorun şurada; ben bu olayı sadece mesaj sayısında kullanmayacağım. üyeler tablosuna ekleyemeceğim şeyler de var. yani bir şekilde en çok olanı bulmam lazım ama yolunu bulamadım işte

    sutun açmadan farklı bir yöntem ile yapabileceğini sanmıyorum ama yapan olursa bizde öğrenmiş oluruz