PHP/PDO ile son konuları ve yorum yapılan konuları listeleme hakkında
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.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (8)
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:
@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.
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.
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
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ü