Merhaba;en çok yorum alan konuları nasıl listelerim yardımcı olursanız sevinirim
Pdo ile listeleme yapmak istiyorum.
Php En Çok Yorum Alan Konuları Listeleme Nasıl Yapılıyor ???
11
●1.035
- 03-12-2016, 02:00:52Ö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:01Kardeş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.grafikcoder adlı üyeden alıntı: mesajı görüntüle
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
- 05-12-2016, 22:58:06Peki 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 çekerimgrafikcoder adlı üyeden alıntı: mesajı görüntüle
- 06-12-2016, 01:02:48Khaaos 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:
- 06-12-2016, 15:35:39Hocam denedin mi sen hiç bence bir hata var ama çözemedim.Hata veriyor ayrıca hata böylegrafikcoder adlı üyeden alıntı: mesajı görüntüle
Parse error: syntax error, unexpected '$yorumlar' (T_VARIABLE) in - 06-12-2016, 21:58:11yenikonular.php içindeki sorguyu böyle değiştirirmisinKhaaos adlı üyeden alıntı: mesajı görüntüle

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:27Hocam şuan pc başında değilim yarın değiştirip sana bilgi veririm ılgın için tekrar tsk ederimgrafikcoder adlı üyeden alıntı: mesajı görüntüle







