v2.5.2
Giriş yap

PHP/PDO ile son konuları ve yorum yapılan konuları listeleme hakkında

mek
867 defa görüntülendi

Php / Pdo ile birlikte bir oyun platformu için her şeyin içerisinde olduğu bir sistem üzerinde çalışıyorum. Bunun yanına ek olarak forum sistemini ekledim fakat istatistikler kısmında son konuları listeleyip gelen yanıtları listeleyemiyorum. Açık konuşmak gerekirse mantığım nasıl bir şey yapmam gerektiği konusunda bir şeyleri doğru söylemiyor. Nasıl bir sorgu yazarsan bu içerikleri beraber listeleyebilirim?

Listelemek istediğim şekil:

YNT: Yeni Konu
Yeni Konu

Şeklinde.

Listeleme Şekli:

Konu Tablosu:

Yorum Tablosu:

Yardım edemeyecekseniz bile en azından mantığımın doğru çalışması için önerilerde bulunursanız çok memnun olurum.

Cevap yaz
Cevaplar (8)
omeryallcnn
1280 gün önce

Merhaba yapmak istediğin olay tam olarak bu mu?

Burdaki gibi son eklenen konunun üzerine, o konuya gelen son yanıtları göstermek mi?

Eğer yapmak istediğin tam olarak bu ise.

  <body>
    <?php
      $yeniEklenenKonular = $db->prepare("SELECT topics.topic_id, topics.topic_name, users.user_nickname, categories.category_name FROM
        topics INNER JOIN users ON topics.user_id = users.user_id INNER JOIN categories ON topics.category_id = categories.category_id ORDER BY topics.lastdate DESC");

      $yeniEklenenKonular->execute();
    ?>

    <?php foreach($yeniEklenenKonular as $row): ?>
      <?php
        $yeniYanit = $db->prepare("SELECT comments.*, topics.topic_name, users.user_nickname FROM comments INNER JOIN topics ON
          comments.topic_id = ? INNER JOIN users ON comments.user_id = users.user_id WHERE comments.topic_id = topics.topic_id ORDER BY comments.last_date DESC LIMIT 3");

        $yeniYanit->execute([$row["topic_id"]]);

        foreach($yeniYanit as $yanitRow):
       ?>

       <p>Yanıt : <a href="#"> <?php echo $yanitRow["topic_name"]; ?> </a>  - (Kullanıcı adı : <a href="#"><?php echo $yanitRow["user_nickname"]; ?></a> )</p>

     <?php  endforeach; ?>

      <p><a href="#"><?php echo $row["topic_name"]; ?></a> Ekleyen : <a href="#"><?php echo $row["user_nickname"]; ?></a> (<?php echo $row["category_name"]; ?>)</p>
    <?php endforeach; ?>
  </body>

Bu şekilde yapmak mümkün, yeniYanit sorgusundaki LIMIT ifadesi ile o konuya son eklenen kaç yorumu getirmek istediğini belirleyebilrsin ben örnek olarak son 3 yorumu getirsin dedim.

Temsili olarak users tablomun yapısı bu şekilde:

mek
1277 gün önce

@omeryallcnn hocam peki şöyle bir durum oluştu.

Listelenen Son 10 Konu;

Ynt: Konu 2
Konu 2 -> Konu 2'ye yorum yapıldığı zaman direkt olarak Konu 2'nin üzerine, Örnekte'de Gösterdiğim gibi yanıt olarak geri dönüyor.
Konu 1 -> Fakat konu 1'e yorum yapıldığı zaman Ynt: Konu 1 en üste çıkması gerektiği hâlde listeleme alanında direkt Konu 1'in üzerine geliyor.

Benim yapmak istediğim şey ise;

Ynt: Konu 1
Konu 2
Konu 1

tarzında. Herhangi bir konuya yanıt geldiği zaman son yanıtı en üste alıp, ona göre listelemek. Sizin gönderdiğiniz kod ise bana sadece Konu 1'in veya diğer açılan konunun içerisine yorum yapıldığı zaman ona bağlı olarak üstüne çıkıyor.

mek
1280 gün önce

Çok teşekkür ederim hocam sorunun kaynağı ve çözümünü direkt belirtmişsiniz :) Tam çözüm sağlandı tekrardan teşekkürler.

mek
1280 gün önce

Inner join ile işin içinden çıkılamaz bi hale getirdim durumu. vbulletin kaynak kodlarını inceledim ama pek istediğim sonucu alamadım. Fikir vermek isteyen var mı?

mek
1281 gün önce

Inner Join yöntemi ile nasıl yapılabilir ki? Aslında aklıma geldi, denedim fakat beceremedim sanırım.

Tarih güncellemesi ile yapılabilir fakat bu sefer 2 adet tarih sütunu tutmam gerekir. 1 tanesi oluşturulduğu tarih bir tanesi yanıt geldiği tarih ama bu seferde yeni yorum geldiği zaman direkt olarak istatistikler kısmında üste çıkar.

Ben ise;

YNT: Yeni Konu - {Kullanıcı Adı: Tester Mek}
YNT: Yeni Konu - {Kullanıcı Adı: Test Mek}
Yeni Konu - {Kullanıcı Adı: Mek}

tarzında bir şey yapmaya çalışıyorum.

qplot
1281 gün önce

en basit çözümü şu inner join le vs yontemleride var lakin en basiti şu olur

en son hangi soruya cevap yazıldıysa o sorunun tarihini şuanki tarih ile güncellemek ve ORDER BY tarih DESC YAPMAK boylece en son konu en uste gelır

yok oyle ıstemem dersen uzun versıyonu yazalım

mek
1281 gün önce

Yanıt için teşekkür ederim Tayfun hocam. Tam olarak öyle. Hem konuları hem de yanıt verilen konuları listelemek.

tayfunerbilen
1281 gün önce

istediğiniz konuları listelerken eğer bir yanıt varsa bunu başında YNT: olarak belirtmek mi? ona göre bir sql kodu paylaşacağım çünkü