• 02-12-2016, 23:49:07
    #1
    Merhaba;en çok yorum alan konuları nasıl listelerim yardımcı olursanız sevinirim
    Pdo ile listeleme yapmak istiyorum.
  • 03-12-2016, 02:00:52
    #2
    Öncelikle sana yardımcı olabilmek adına ben örnek diye bir veritaban oluşturdum. Bu veritabana konular ve yorumlar adında tablolar açtım.





    Gördüğün gibi tablo içeriklerini bu şekilde yaptım, örnek olabilmesi için, sende farklı olduğunu biliyorum. ama birşeyler anlayabilmen için ve içinede birkaç veri girdim.

    Sonra ise db.php adında dosya oluşturup içine şunları ekledim:

    <?php
    try {
        $db = new PDO("mysql:host=localhost;dbname=ornek", "root", "");
    } catch ( PDOException $e ){
        print $e->getMessage();
    }
    ?>
    Bu bilidğimiz gibi pdo ile veritabana bağlanma kodlarıdır. Buradaki ayarları düzenlersin.

    Daha sonra ise konuların listeleneceği sayfama şu kodları ekledim:

    <h3>En Çok Yorum Alan Konular</h3>
    <table border="1" cellpadding="5">
        <thead>
        <tr>
            <th>Sıralama</th>
            <th>Konu Başlığı</th>
            <th>Yorum Sayısı</th>
        </tr>
        </thead>
        <tbody>
        <?php
        $yorumlar = $db->prepare('SELECT count(*) as yorumsayisi,GROUP_CONCAT(yorum_id) as yorumlar,konular.* FROM yorumlar LEFT JOIN konular ON yorumlar.konu = konular.konular_id GROUP BY konu ORDER BY yorumsayisi DESC');
        $yorumlar->execute();
        $yorumlarlistele = $yorumlar->fetchAll(PDO::FETCH_ASSOC);
    
        if($yorumlarlistele){
            $siralama = 0;
            foreach($yorumlarlistele as $item){
                $siralama++;
                echo '<tr>';
                echo '<td>'.$siralama.'</td>';
                echo '<td>'.$item['konu_baslik'].'</td>';
                echo '<td>'.$item['yorumsayisi'].'</td>';
                echo '</tr>';
            }
        }
        ?>
        </tbody>
    </table>
    Tabi ben burada örnek olsun diye tablo içine aldım, kendine göre düzenleyebilirsin. Sonuç :




    PDO ile veri çekim işlemini yukarıda sağladım.

    Ama direk olarak sql sorgusunada vereyim.

    SELECT count(*) as yorumsayisi,GROUP_CONCAT(yorum_id) as yorumlar,konular.* FROM yorumlar LEFT JOIN konular ON yorumlar.konu = konular.konular_id GROUP BY konu ORDER BY yorumsayisi DESC
    Burada konular ve yorumlar tablolarını left join ile birleştirip, gerekli konumları eşleştiriyoruz. Group by ile konuları gruplandırıyoruz. GROUP_CONCAT ile yorum_id'leri aynı olanları konular başlığında topluyoruz. Bunu 1,5,6,7,8 gibi topluyor. Yani phpde implode olayı dediğimiz olaya benziyor. count(*) ilede bunları saydırıyoruz. sql sorgusunda gördüğün konular.* ise konular tablosunun elemanlarının hepsinide dahil et anlamındadır. Sql sorgumuz aslında şöyle gözükmektedir.

  • 03-12-2016, 12:16:01
    #3
    grafikcoder adlı üyeden alıntı: mesajı görüntüle
    Öncelikle sana yardımcı olabilmek adına ben örnek diye bir veritaban oluşturdum. Bu veritabana konular ve yorumlar adında tablolar açtım.





    Gördüğün gibi tablo içeriklerini bu şekilde yaptım, örnek olabilmesi için, sende farklı olduğunu biliyorum. ama birşeyler anlayabilmen için ve içinede birkaç veri girdim.

    Sonra ise db.php adında dosya oluşturup içine şunları ekledim:

    <?php
    try {
        $db = new PDO("mysql:host=localhost;dbname=ornek", "root", "");
    } catch ( PDOException $e ){
        print $e->getMessage();
    }
    ?>
    Bu bilidğimiz gibi pdo ile veritabana bağlanma kodlarıdır. Buradaki ayarları düzenlersin.

    Daha sonra ise konuların listeleneceği sayfama şu kodları ekledim:

    <h3>En Çok Yorum Alan Konular</h3>
    <table border="1" cellpadding="5">
        <thead>
        <tr>
            <th>Sıralama</th>
            <th>Konu Başlığı</th>
            <th>Yorum Sayısı</th>
        </tr>
        </thead>
        <tbody>
        <?php
        $yorumlar = $db->prepare('SELECT count(*) as yorumsayisi,GROUP_CONCAT(yorum_id) as yorumlar,konular.* FROM yorumlar LEFT JOIN konular ON yorumlar.konu = konular.konular_id GROUP BY konu ORDER BY yorumsayisi DESC');
        $yorumlar->execute();
        $yorumlarlistele = $yorumlar->fetchAll(PDO::FETCH_ASSOC);
    
        if($yorumlarlistele){
            $siralama = 0;
            foreach($yorumlarlistele as $item){
                $siralama++;
                echo '<tr>';
                echo '<td>'.$siralama.'</td>';
                echo '<td>'.$item['konu_baslik'].'</td>';
                echo '<td>'.$item['yorumsayisi'].'</td>';
                echo '</tr>';
            }
        }
        ?>
        </tbody>
    </table>
    Tabi ben burada örnek olsun diye tablo içine aldım, kendine göre düzenleyebilirsin. Sonuç :




    PDO ile veri çekim işlemini yukarıda sağladım.

    Ama direk olarak sql sorgusunada vereyim.

    SELECT count(*) as yorumsayisi,GROUP_CONCAT(yorum_id) as yorumlar,konular.* FROM yorumlar LEFT JOIN konular ON yorumlar.konu = konular.konular_id GROUP BY konu ORDER BY yorumsayisi DESC
    Burada konular ve yorumlar tablolarını left join ile birleştirip, gerekli konumları eşleştiriyoruz. Group by ile konuları gruplandırıyoruz. GROUP_CONCAT ile yorum_id'leri aynı olanları konular başlığında topluyoruz. Bunu 1,5,6,7,8 gibi topluyor. Yani phpde implode olayı dediğimiz olaya benziyor. count(*) ilede bunları saydırıyoruz. sql sorgusunda gördüğün konular.* ise konular tablosunun elemanlarının hepsinide dahil et anlamındadır. Sql sorgumuz aslında şöyle gözükmektedir.

    Kardeşim senden allah razı olsun dediklerini uyguladım hiç bir sorun çıkmadı.Tam istediğim gibi bir şey oldu mantığını dahi anlatmışsın.

    Tek tek okuyarak mantığınıda öğrendim.Çok tşkler.Senide rahatsız ettiğim için özür dilerim.Zaman ayırmışsın tek tek anlatmışsın.

    Ayrıca toprakmışız bende Çorum Sungurlu'danım

  • 03-12-2016, 16:37:54
    #4
    Khaaos adlı üyeden alıntı: mesajı görüntüle
    Kardeşim senden allah razı olsun dediklerini uyguladım hiç bir sorun çıkmadı.Tam istediğim gibi bir şey oldu mantığını dahi anlatmışsın.

    Tek tek okuyarak mantığınıda öğrendim.Çok tşkler.Senide rahatsız ettiğim için özür dilerim.Zaman ayırmışsın tek tek anlatmışsın.

    Ayrıca toprakmışız bende Çorum Sungurlu'danım

    memnun oldum
  • 05-12-2016, 22:58:06
    #5
    grafikcoder adlı üyeden alıntı: mesajı görüntüle
    memnun oldum
    Peki hocam üyeler diye bir tablom var haberi yazan üye yi nasıl çekerim bu senin belirttiğin sql sorgusuna nasıl bir ekleme yapsam üye isminide çekerim
  • 06-12-2016, 01:02:48
    #6
    Khaaos adlı üyeden alıntı: mesajı görüntüle
    Peki hocam üyeler diye bir tablom var haberi yazan üye yi nasıl çekerim bu senin belirttiğin sql sorgusuna nasıl bir ekleme yapsam üye isminide çekerim


    Böyle birşey istiyorsun herhalde.



    Ek olarak uyeler tablosu oluşturdum ve konular tablosunun içine konu_acan adında bir sutün ekledim.



    Burada gördüğün gibi konu_acan kısımlarına oluşturan üyelerin id'lerini verdim.

    Üyeler tablom:




    Kodlar
    <h3>En Çok Yorum Alan Konular</h3>
    <table border="1" cellpadding="5">
        <thead>
        <tr>
            <th>Sıralama</th>
            <th>Konu Başlığı</th>
            <th>Yorum Sayısı</th>
            <th>Konuyu açan</th>
        </tr>
        </thead>
        <tbody>
        <?php
        $yorumlar = $db->prepare('SELECT count(*) as yorumsayisi,GROUP_CONCAT(yorum_id) as yorumlar,konular.konu_baslik,konular.konular_id,uyeler.uye_adi FROM yorumlar LEFT JOIN konular ON yorumlar.konu = konular.konular_id LEFT JOIN uyeler ON konular.konu_acan = uyeler.uye_id GROUP BY konu ORDER BY yorumsayisi DESC');
        $yorumlar->execute();
        $yorumlarlistele = $yorumlar->fetchAll(PDO::FETCH_ASSOC);
    
        if($yorumlarlistele){
            $siralama = 0;
            foreach($yorumlarlistele as $item){
                $siralama++;
                echo '<tr>';
                echo '<td>'.$siralama.'</td>';
                echo '<td>'.$item['konu_baslik'].'</td>';
                echo '<td>'.$item['yorumsayisi'].'</td>';
                echo '<td>'.$item['uye_adi'].'</td>';
                echo '</tr>';
            }
        }
        ?>
        </tbody>
    </table>

    SQL Sorgumuz:

    SELECT count(*) as yorumsayisi,GROUP_CONCAT(yorum_id) as yorumlar,konular.konu_baslik,konular.konular_id,uyeler.uye_adi FROM yorumlar LEFT JOIN konular ON yorumlar.konu = konular.konular_id LEFT JOIN uyeler ON konular.konu_acan = uyeler.uye_id GROUP BY konu ORDER BY yorumsayisi DESC
    Ek olarak üyeler tablosunuda birleştirdik ve seçicilerimiz içinden gerekli alanları seçip listelettirdik.


    Sonuç olarak tablo yapımız aslında şöyle:

  • 06-12-2016, 15:35:39
    #7
    grafikcoder adlı üyeden alıntı: mesajı görüntüle


    Böyle birşey istiyorsun herhalde.



    Ek olarak uyeler tablosu oluşturdum ve konular tablosunun içine konu_acan adında bir sutün ekledim.



    Burada gördüğün gibi konu_acan kısımlarına oluşturan üyelerin id'lerini verdim.

    Üyeler tablom:




    Kodlar
    <h3>En Çok Yorum Alan Konular</h3>
    <table border="1" cellpadding="5">
        <thead>
        <tr>
            <th>Sıralama</th>
            <th>Konu Başlığı</th>
            <th>Yorum Sayısı</th>
            <th>Konuyu açan</th>
        </tr>
        </thead>
        <tbody>
        <?php
        $yorumlar = $db->prepare('SELECT count(*) as yorumsayisi,GROUP_CONCAT(yorum_id) as yorumlar,konular.konu_baslik,konular.konular_id,uyeler.uye_adi FROM yorumlar LEFT JOIN konular ON yorumlar.konu = konular.konular_id LEFT JOIN uyeler ON konular.konu_acan = uyeler.uye_id GROUP BY konu ORDER BY yorumsayisi DESC');
        $yorumlar->execute();
        $yorumlarlistele = $yorumlar->fetchAll(PDO::FETCH_ASSOC);
    
        if($yorumlarlistele){
            $siralama = 0;
            foreach($yorumlarlistele as $item){
                $siralama++;
                echo '<tr>';
                echo '<td>'.$siralama.'</td>';
                echo '<td>'.$item['konu_baslik'].'</td>';
                echo '<td>'.$item['yorumsayisi'].'</td>';
                echo '<td>'.$item['uye_adi'].'</td>';
                echo '</tr>';
            }
        }
        ?>
        </tbody>
    </table>

    SQL Sorgumuz:

    SELECT count(*) as yorumsayisi,GROUP_CONCAT(yorum_id) as yorumlar,konular.konu_baslik,konular.konular_id,uyeler.uye_adi FROM yorumlar LEFT JOIN konular ON yorumlar.konu = konular.konular_id LEFT JOIN uyeler ON konular.konu_acan = uyeler.uye_id GROUP BY konu ORDER BY yorumsayisi DESC
    Ek olarak üyeler tablosunuda birleştirdik ve seçicilerimiz içinden gerekli alanları seçip listelettirdik.


    Sonuç olarak tablo yapımız aslında şöyle:

    Hocam denedin mi sen hiç bence bir hata var ama çözemedim.Hata veriyor ayrıca hata böyle

    Parse error: syntax error, unexpected '$yorumlar' (T_VARIABLE) in
  • 06-12-2016, 21:58:11
    #8
    Khaaos adlı üyeden alıntı: mesajı görüntüle
    Hocam denedin mi sen hiç bence bir hata var ama çözemedim.Hata veriyor ayrıca hata böyle

    Parse error: syntax error, unexpected '$yorumlar' (T_VARIABLE) in
    yenikonular.php içindeki sorguyu böyle değiştirirmisin
    SELECT count(*) as yorumsayisi,GROUP_CONCAT(yorum_id) as yorumlar,haberler.*,uyeler.uye_adsoyad FROM yorumlar LEFT JOIN haberler ON yorumlar.yorum_haber_id = haberler.haber_id LEFT JOIN uyeler ON haberler.haber_yazar = uyeler.uye_id GROUP BY yorum_haber_id ORDER BY yorumsayisi DESC
  • 06-12-2016, 23:46:27
    #9
    grafikcoder adlı üyeden alıntı: mesajı görüntüle
    yenikonular.php içindeki sorguyu böyle değiştirirmisin
    SELECT count(*) as yorumsayisi,GROUP_CONCAT(yorum_id) as yorumlar,haberler.*,uyeler.uye_adsoyad FROM yorumlar LEFT JOIN haberler ON yorumlar.yorum_haber_id = haberler.haber_id LEFT JOIN uyeler ON haberler.haber_yazar = uyeler.uye_id GROUP BY yorum_haber_id ORDER BY yorumsayisi DESC
    Hocam şuan pc başında değilim yarın değiştirip sana bilgi veririm ılgın için tekrar tsk ederim