• 01-11-2007, 01:59:25
    #1
    merhabalar .
    üzerinde çalıştığım yeni projemde sql sorunu yaşıyorum.

    konuyu açıklayacak olursak :
    veri tabanında yorumlar ve isimler diye iki tablom var .


    isimler tablosu şu şekilde :

    +-----+-------+-------+------------+------------+-----------+----------+--------+----------+-------|
    |--------------------------------------------|isimler|--------------------------------------------|
    +-----+-------+-------+------------+------------+-----------+----------+--------+----------+-------|
    | iid | isim |
    +-----+-------+-------+------------+------------+-----------+----------+--------+----------+-------|
    | 1 | mehmet |
    | 3 | ali |





    yorumlar tablosu şu şekilde :

    +-----+-------+-------+------------+------------+-----------+----------+--------+----------+-------|
    |--------------------------------------------|yorumlar|--------------------------------------------|
    +-----+-------+-------+------------+------------+-----------+----------+--------+----------+-------|
    |yid| iid | yorum |
    +-----+-------+-------+------------+------------+-----------+----------+--------+----------+-------|
    |56 | 1 | yorumlardan biri |
    |57 | 3 | baska bir yorum |
    |57 | 1 | dahada baska bir yorum |

    yid=yorum id
    iid= isim id
    yorum = yorumlar





    şimdi şöle bişey yapmak istiyorum :
    en çok yorum yazılan 10 isimi alt alta dizmek :
    yani şu şekilde:

    mehmet (2)
    ali (1)



    en çok yorum alanı en üste almalı ve parantez içerisinde yorum sayısını yazmalı.


    bu konuda bir çalışma yaptım her isime parantez içerisinde kaç tane yorum olduğunu yazıyorum ama bu isimleri parantez içerisindeki rakamın büyükten küçüğe doğru sıralayamıyorum.

    yani sıralama yorum sayısına göre olmuyor isime göre oluyor :


    kullandığım kodlar aşağıdaki gibi...

    <? $sql6= "SELECT * FROM isimler ORDER BY fadi ASC";
    $Calistirlistele6 = mysql_query ($sql6); while(list($v_fid1,$v_fadi1,$v_adres1,$v_ftelefon1 ,$v_kateid1,$v_yetkili1,$v_ykadi1,$v_ysifre1)=mysq l_fetch_array($Calistirlistele6))
    { ?>
    &nbsp;<lii>&nbsp;<a style='text-decoration: none' href="isimincele.php?iid=<? print $v_fid1; ?>"><? print $v_fadi1; ?>(<? $sql3= "SELECT COUNT(*) FROM yorumlar WHERE fid='$v_fid1' and durum='Onayli' ";
    $Calistirlistele3 = mysql_query ($sql3);
    while(list($veri3)=mysql_fetch_array($Calistirlist ele3))
    print $veri3;?>)</a></lii><br>
    <? } ?>



    bu kodları nasıl düzenlersek istediğim gibi yaparız sıralamayı ? yorum sayısına göre sıralamalı.



    yardımlarınız için tşkkr ederim.
  • 02-11-2007, 01:08:42
    #2
    akn
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Alexis adlı üyeden alıntı: mesajı görüntüle
    ORDER BY isim ASC
    senin yazdığın kod, isimlere göre artan bir şekilde sıralar.

    arkadaşın istediği en çok yorum alan en üstte olmalı.

    select CONCAT(ad, ' (',sayi , ') ') from (select distinct t1.isim as ad, (select count(wdp_yorumlar.yid) from wdp_yorumlar where t1.iid=wdp_yorumlar.iid) as sayi from wdp_isimler as t1 LEFT OUTER JOIN wdp_yorumlar as t2 on t1.iid=t2.iid) as newt order by sayi desc;

    sadece bu sql kodu çalıştırman yeterli. çıktısı şuna benzer birşey vercek:

    mehmet (95)
    ahmet (88)
    veli (72)
    ayşe (65)

    kolay gelsin.. tavsiyem biraz sql çalış.. sorunun olursa pmden ulaşabilirsin