社交媒体状态评论系统

时间:2017-06-08 19:47:33

标签: php comments status

我正在尝试使用简单的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>';

}

?>

似乎复制了同一帖子的每条评论的帖子。

不确定是否有意义,但我会很感激答案。

1 个答案:

答案 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.datepost_comments.date,所以我不确定哪一个会在$r['date']中。最好对这些列中的至少一个进行别名以消除它们的歧义。