我正在尝试使用简单的php-mysqli创建一个后评论系统,虽然它很简单但它似乎没有按照我想要的方式给我结果,即:
--- POST MESSAGE ----
----- -----评论
以下是我使用的代码:
<?php
session_start();
include_once('php_includes/db_conx.php');
$user=$_SESSION['user'];
$o =mysqli_query($db_conx, "SELECT post.id,post.post,post.date,post_comments.poster,post_comments.comment,post_comments.date FROM post LEFT JOIN post_comments ON post.id=post_comments.post_id AND post.username='$user' ORDER BY post.date");
while($r=mysqli_fetch_array($o,MYSQLI_ASSOC)){
$status= $r['post'];
$date=$r['date'];
$com=$r['comment'];
$pid=$r['id'];
$poster=$r['poster'];
if(count($pid) > 1){
}
echo $status.'|'.$pid.'|'.$date.'<br>'.$poster.':'.$com.'<hr>';
}
?>
似乎复制了同一帖子的每条评论的帖子。
不确定是否有意义,但我会很感激答案。
答案 0 :(得分:0)
首先,将帖子ID添加到您的查询ORDER BY
。这将确保您的帖子及其所有评论一起显示,并且只显示一次。 (我建议同时添加post_comments.date
,以便您的评论按顺序显示,但这对于分组工作没有必要。)
... ORDER BY post.date, post.id, post_comments.date
然后随时跟踪帖子ID。仅在帖子ID更改时才回显帖子信息。
$id = null; // initialize to null
while ($r = mysqli_fetch_array($o, MYSQLI_ASSOC)) {
$pid = $r['id'];
$status = $r['post'];
$date = $r['date'];
$com = $r['comment'];
$poster = $r['poster'];
if ($pid !== $id) {
echo $status.'|'.$pid.'|'.$date.'<br>'; // new post, so echo post info here
$id = $pid; // $id becomes new post id
}
if ($com) {
echo $poster.':'.$com.'<br>'; // echo comment if present
}
}
另一件可能会造成一些麻烦的事情是你在查询中选择了post.date
和post_comments.date
,所以我不确定哪一个会在$r['date']
中。最好对这些列中的至少一个进行别名以消除它们的歧义。