【问题标题】:Allow comments on each echoed row of text允许对每个回显的文本行进行评论
【发布时间】:2014-05-14 08:07:37
【问题描述】:

首先,我回显数据库中的每个“帖子”,然后我在数据库中获得了另一个名为“cmets”的表,我想在其中存储每个“帖子”所做的每条评论。

如何回显评论字段,使其成为每个“帖子”的单独评论字段?

到目前为止,我确实在 while 循环中回显了一个评论字段,但是它没有连接到特定的“帖子”,“帖子”和“评论”在数据库中是相关的。

$sql = "SELECT posts.post, user.username,posts.date
        FROM posts, user
        WHERE posts.userid = user.id";

$result = mysql_query($sql);
echo '<ul>';
while($row = mysql_fetch_array($result)){
  if(!isset($_POST['sort'])){
    echo '<li>'.$row['username'].': '.$row['post'].$row['date'] .'</li></br>';
  }else{
    $sql = "SELECT posts.post, user.username, posts.date
            FROM posts, user
            WHERE posts.userid = user.id
            ORDER BY posts.date";
    $result = mysql_query($sql);
    while($row = mysql_fetch_array($result)){
      echo '<li>'.$row['username'].': '.$row['post'].''.row['date'].'</li>'.'<br/>';

【问题讨论】:

标签: php mysql


【解决方案1】:

如果您绝对必须将 cmets 放在另一张桌子上,我建议您将这张桌子布置成这样:

| id | comment | postid |
|    |         |        |

然后您的查询将如下所示:

$postid = $post['id']
$commentsquery = "SELECT * FROM comments WHERE postid=$postid";

显然这需要您为 cmets 和帖子设置一个自动递增的 id 字段

【讨论】:

  • 我得到了这样的数据库,但我的问题是如何让评论字段知道“此评论显示在此处”而另一条评论应该在其他地方?
  • 现在这是最坏的情况。永远不要对每个帖子 ID 进行查询。使用左连接和 cmets 作为单独的表是一个明智的选择。你不能在一张桌子上正确地做到这一点。
  • @Samuel 我的做法有什么问题?它比左连接慢吗?
  • 大量。对于查询一篇文章,差异可以忽略不计,但查询 100 篇文章并在每个查询中获取其对应的 cmets 会产生 101 个查询,而左连接只会产生一个查询。没有必要进行任何性能比较,因为 1:101 应该是足够的提示 :) 但是请随意测试,对于任何中等规模的查询,差异应该是巨大的。
  • 我同意。 OP,做左连接的事情
猜你喜欢
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多