Как выбрать комментарии с дочерними комментариями из MySQL?

0

У меня две таблицы:

'Комментарии'

| 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;
  }
}
?>

Это не работает должным образом. Он показывает 1 родительский и 1 комментарий ребенка в каждом гнезде, хотя есть несколько комментариев для детей.

Как я могу его исправить и свести к минимуму? Можно ли это сделать, используя только один запрос?

Спасибо!

  • 0
    Пожалуйста, прекратите использовать устаревший, небезопасный и устаревший API-интерфейс PHP mysql_
  • 0
    Что использовать тогда? Можете поделиться ссылками?
Показать ещё 1 комментарий
Теги:

2 ответа

-1

Просто используйте JOIN для получения комментариев и со всеми дочерними элементами.

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;

Затем вы можете выполнить цикл результата, чтобы напечатать его соответствующим образом. Это было бы лучше, поскольку вам пришлось бы запускать только один запрос.

-1

JOIN к таблице.

Измените свой запрос на:

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."'

Вам не нужен второй запрос, вот полный код:

<?php

$query = mysql_query("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."'");

while($res = mysql_fetch_assoc($query))
{
  $id = $res['id'];
  $content = $res['content'];
  $name = $res['name'];
  $photo = $res['photo'];

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

?>
  • 0
    Как насчет запятой в этой части: FROM comments , users Это правильный синтаксис или просто орфографическая ошибка?
  • 0
    Обновил мой ответ, смотрите
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню