繁体   English   中英

有评论的新闻数据库,如何摆脱重复 - 用mysql和PHP?

[英]News database with comments, how to get rid of duplicates - with mysql and PHP?

我想用MySQL和PHP创建一个新闻更新系统。 但我不能让它工作,所以我可以显示新闻更新和所有附加的评论(然后登录有效用户,该人可以单独删除每个评论)。

我有这四个表和数据库架构

news_tbl (news_id, date, user (fk to users_tbl.username), headline, bodytext and picture)
users_tbl (username, email, password, usertype)
comments_tbl (comments_id, name, comment)
news_comments_tbl (news_comments_id, news_id_fk, comments_id_dk)

当用户写入新闻更新时, news_comments_tbl其设置为news_idcomments_id为NULL,则用户写入评论, news_comments_tbl设置带有id的comments_id

但是当有多个评论时,新闻更新会重复,所以它就像:

新闻1
-没有意见

新闻2
-1条评论
评论:
汤姆斯评论道

新闻3
-2评论
评论:
约翰斯评论

新闻3
-2评论
评论:
Allans评论道

而且我要:

新闻1
-0评论

新闻2
-1条评论
评论:
汤姆斯评论道

新闻3
-2评论
评论:
约翰斯评论
Allans评论道

我如何显示每个新闻更新及其附带的所有评论?
我尝试过GROUP_CONCAT - 但是我无法获取每条评论的ID,因此用户可以单独删除评论吗?
我也试过GROUP BY news_tbl.news_id ,但后来我才得到第一条评论?
我如何计算评论? 我试过这个:

COUNT(comments_tbl.comments_id) AS count

但后来我才得到第一个书面新闻?! 我花了很多时间试图让它工作,但似乎无法弄明白:(希望有人可以帮助我

这是我的查询:

$sqlquery ="SELECT news_tbl.*, news_comments_tbl.*, users_tbl.*, comments_tbl.* 
    FROM news_tbl
    LEFT JOIN news_comments_tbl ON news_comments_tbl.news_id_fk = news_tbl.news_id
    LEFT JOIN comments_tbl ON news_comments_tbl.comments_id_fk = comments_tbl.comments_id
    LEFT JOIN users_tbl ON users_tbl.username = news_tbl.user
    ORDER BY news_tbl.news_id DESC LIMIT 5";

这是我的PHP代码:

        $result = $conn->query($sqlquery);


        foreach($result as $row)
        {
            $commentsidfk = $row['comments_id_fk'];
            $newsidfk = $row['news_id_fk'];

          if($row['comments_id_fk'] == NULL)
          {
              echo $row['headline'];
              echo '<br>';
              echo $row['bodytext'];
              echo '<br>';
          }
          if($row['comments_id_fk'] != NULL)
          {
              echo $row['headline'];
              echo '<br>';
              echo $row['bodytext'];

              echo '<br>';
              echo $row['comment'];
              echo '<br>';
              echo '<a href=delete.php?news_id='.$commentsidfk.' >Delete comment</a>';
              echo '<br>';

          }
              echo '<br>';
              echo '<a href=delete.php?news_id='.$newsidfk.' >Delete news</a>';
              echo '<br>';
        }

因为您要将新闻加入评论,所以每行都会包含新闻和其中一条评论。

您可能会发现在一个查询中选择新闻更有效,并在第二个查询中获取注释,因为您要传输的数据多于您所需的数据。 你需要测量它以确定它是否更快。

或者,您可以在循环中处理此问题,只需在检测到新ID时编写新闻(您的查询已按ID排序,因此您知道它们将按顺序处理)

    $currentNewsId = 0;


    foreach($result as $row)
    {
        $commentsidfk = $row['comments_id_fk'];
        $newsidfk = $row['news_id_fk'];

        if ($newsidfk != $currentNewsId) {
             // write the news out
             $currentNewsId = $newsidfk;
        }
        // ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM