Php 如何从MySQL中选择带有子注释的注释?

Php 如何从MySQL中选择带有子注释的注释?,php,mysql,Php,Mysql,我有两张桌子: “评论” | id | content | user_id | article_id | parent_id | “用户” | id | name | photo | 我的问题是: <?php $query = mysql_query("SELECT comments.id, comments.content, users.name, users.photo FROM comments, users WHERE comments.article_id = '".$ge

我有两张桌子:

“评论”

| id | content | user_id | article_id | parent_id |
“用户”

| id | name | photo |
我的问题是:

<?php
$query = mysql_query("SELECT comments.id, comments.content, users.name, 
users.photo FROM comments, users WHERE comments.article_id = '".$get_id."' 
AND comments.parent_id = 0 AND comments.user_id = users.id");
while($res = mysql_fetch_assoc($query))
{
  $id = $res['id'];
  $content = $res['content'];
  $name = $res['name'];
  $photo = $res['photo'];

  echo $photo;
  echo $name;
  echo $content;

  $query2 = mysql_query("SELECT comments.id, comments.content, users.name, 
  users.photo FROM comments, users WHERE comments.article_id = '".$get_id."' 
AND comments.parent_id = '".$id."' AND comments.user_id = users.id");
  while($res2 = mysql_fetch_assoc($query2))
  {
    $id2 = $res2['id'];
    $content2 = $res2['content'];
    $name2 = $res2['name'];
    $photo2 = $res2['photo'];

    echo $photo2;
    echo $name2;
    echo $content2;
  }
}
?>

将表本身连接起来

将查询更改为:

SELECT comments.id, comments.content, users.name, 
users.photo FROM comments JOIN users ON comments.user_id = users.id JOIN 
comments c ON comments.id = 
c.parent_id  WHERE 
comments.article_id = '".$get_id."' 
AND comments.parent_id = '".$id."'
您不需要第二个查询,以下是完整代码:

只需使用a来获取注释,并与所有子项一起使用

SELECT users.id userID, users.name, users.photo , childrenComments.*,   
   parentComments.id cpId, parentComments.content cpContent,
   parentComments.user_id cpUser_id,parentComments.article_id cpArticleId
FROM users JOIN (SELECT * FROM Comment WHERE id=0) parentComments 
ON users.id=parentComments.user_id LEFT JOIN Comment childrenComments
ON parentComments.id=childrenComments.parent_id;

然后,您可以遍历结果以适当地打印它。这会更好,因为您只需运行一个查询。

这部分中的逗号是什么:
从评论中,用户
这是正确的语法还是拼写错误?更新了我的答案,请参见使用
选择不同的..
删除重复的
“选择DISTINCT comments.id、comments.content、users.name、users.photo FROM comments JOIN users ON comments.user\u id=users.id JOIN comments c ON comments.id=c.parent\u id WHERE comments.article\u id=”。$get\u id.““
I添加了左连接
SELECT DISTINCT comments.id,comments.content,users.name,users.photo FROM comments JOIN users ON comments.user\u id=users.id左连接comments.id=c.parent\u-id WHERE comments.article\u-id=”。
现在输出顺序是:
[id=1,parent\u-id=0],[id=2,parent\u-id=1],[id=4,parent\u-id=1],[id=3,parent\u id=0],[id=5,parent\u id=2],[id=6,parent\u id=1]
有点奇怪,请停止使用PHP的陈旧、不安全且不推荐使用的mysql\u API,然后使用什么?你能分享一些链接吗?使用MySQLi或更好的PDO