我有三个表,1.comment,2.neted comment,3。username 我目前正在努力如何以最佳方式输出嵌套评论
$sql = "SELECT comment.*, nested_comment.subject AS nc_subject, users.username
FROM comment
INNER JOIN users
ON comment.user_id = users.id AND comment.blog_id = $id
LEFT JOIN nested_comment
ON comment.id = nested_comment.comment_id
ORDER BY comment.id DESC";
我当前的观看代码
<? while($comment = $result->fetch_object()) { ?>
<p> <?=$comment->subject . ' by ' . $comment->username; ?> </p>
<hr>
<div class="nested_comment">
<p> <?=$comment->nc_subject; ?> </p>
</div>
显示了我想要的所有数据,但是说我有-2个嵌套注释-1个父注释 - 父注释仍然只显示2次。
我可以在while循环中查看if-else语句,如果之前的注释ID相同,但我正在为此寻找更优雅/更有效的解决方案,我不知道如何到&#39; group&#39;它在sql上
答案 0 :(得分:2)
为了更优雅的方式,您可以使用父注释作为数组键和嵌套注释作为值来将这些注释提取到数组中。
b
然后你可以使用&#34; foreach&#34;迭代这个数组。并建立你的div。
$array[ $comment->subject ][] = $comment->nc_subject;
$ key将是您的父注释,$ value将是一个包含嵌套注释的数组。因此,您需要迭代$ value以获取嵌套注释。
您可以查看此答案的键值数组用法:https://stackoverflow.com/a/1951708/2698754
答案 1 :(得分:1)
由于您在同一查询中检索了注释和嵌套注释的所有列,因此结果的每一行都将包含注释以及嵌套注释的次数。
将查询拆分为2个单独的查询以分别获取注释和嵌套注释,或者如您所述,添加__set__
子句以检查当前GenericForeignKey
是否与最后一个相同。
使用if
,执行以下操作:
comment.id