我正在构建一个应用程序,让用户可以将自己的贡献添加到帖子流中,这些应用程序按贡献ID进行升序排序(即评论按照发布顺序依次显示)。但是,在每个评论中都有一个“贡献如下”的选项,在这种情况下,新贡献应直接显示在所选评论的正下方,而该评论基本上是回复的。我想我会在contrib_parent_id的贡献表中添加一个列...但是,我有点不清楚如何将parent_id不为NULL的那些帖子合并到现有循环中。现在我有
<?php
$sql_cont = "SELECT * FROM contributions
JOIN users on user_id = cont_author
WHERE cont_stream_id = $sid";
$result_cont = query($sql_cont);
while($data_cont = mysqli_fetch_array($result_cont)) { ?>
<div class="contrib">
<img class="streamAvi" src="<?php echo $data_cont['user_avi']; ?>" alt="prof">
<section class="textCont"><?php echo html_entity_decode($data_cont['cont_content'], ENT_QUOTES); ?></section>
</div>
<?php } ?>
这当然显示了所有贡献的顺序,而不考虑一个是否是对另一个人的回复。非常感谢任何帮助,如果需要,我可以为我的问题添加更多细节。谢谢!
编辑 -
我尝试了以下操作,使用了2个单独的查询,显示了没有父级的所有注释,然后显示了对每个原始注释的回复的所有注释。当你回复回复时会出现问题,因为第一个回复不在原始循环中(因为它有一个父回复)。
$sql_cont = "SELECT * FROM contributions
JOIN users on user_id = cont_author
WHERE cont_stream_id = $sid";
$result_cont = query($sql_cont);
$sql_reply = "SELECT * FROM contributions
JOIN users on user_id = cont_author
WHERE cont_stream_id = $sid AND cont_parent IS NOT NULL";
$result_reply = query($sql_cont);
while($data_cont = mysqli_fetch_array($result_cont)) {
if($data_cont['cont_parent'] == NULL) { ?>
<div class="contrib">
<img class="streamAvi" src="<?php echo $data_cont['user_avi']; ?>" alt="prof">
<section class="textCont">
<?php if($data_cont['cont_content'] != NULL) { echo html_entity_decode($data_cont['cont_content'], ENT_QUOTES); } if($data_cont['cont_video_code'] != NULL) { echo html_entity_decode($data_cont['cont_video_code'], ENT_QUOTES); } ?>
</section>
<section class="contAbout">
<div class="likes">
<span class="likeNum num<?php echo $data_cont['cont_id']; ?>"><?php if(mysqli_num_rows($result_num) == 0) { echo "0"; } echo $com['number']; if($com['number'] == 1) { echo " Like"; } else { echo " Likes"; } ?></span>
<button id="<?php echo $data_cont['cont_id']; ?>" class="likeBtn like<?php echo $data_cont['cont_id']; ?> <?php if($check==1) { echo "hidden"; } ?>"></button>
<button id="<?php echo $data_cont['cont_id']; ?>" class="unlikeBtn unlike<?php echo $data_cont['cont_id']; ?> <?php if($check==0) { echo "hidden"; } ?>"></button>
<span class="contAdd">6 hours ago from <a href="profile.php?user=1"><?php echo $data_cont['username']; ?></a>, <?php echo $data_cont['user_bio']; ?></span>
</div>
<span class="contAdd contMore">Source - <a href="javascript:;" class="contBelow" data-parent_id="<?php echo $data_cont['cont_id']; ?>">Contribute Below</a></span>
</section>
</div>
<?php } // end if
while($data_reply = mysqli_fetch_array($result_reply)) {
if($data_reply['cont_parent'] == $data_cont['cont_id']) { ?>
<div class="contrib">
<img class="streamAvi" src="<?php echo $data_reply['user_avi']; ?>" alt="prof">
<section class="textCont">
<?php if($data_reply['cont_content'] != NULL) { echo html_entity_decode($data_reply['cont_content'], ENT_QUOTES); } if($data_reply['cont_video_code'] != NULL) { echo html_entity_decode($data_reply['cont_video_code'], ENT_QUOTES); } ?>
</section>
<section class="contAbout">
<div class="likes">
<span class="likeNum num<?php echo $data_reply['cont_id']; ?>"><?php if(mysqli_num_rows($result_num) == 0) { echo "0"; } echo $com['number']; if($com['number'] == 1) { echo " Like"; } else { echo " Likes"; } ?></span>
<button id="<?php echo $data_reply['cont_id']; ?>" class="likeBtn like<?php echo $data_reply['cont_id']; ?> <?php if($check==1) { echo "hidden"; } ?>"></button>
<button id="<?php echo $data_reply['cont_id']; ?>" class="unlikeBtn unlike<?php echo $data_reply['cont_id']; ?> <?php if($check==0) { echo "hidden"; } ?>"></button>
<span class="contAdd">6 hours ago from <a href="profile.php?user=1"><?php echo $data_reply['username']; ?></a>, <?php echo $data_reply['user_bio']; ?></span>
</div>
<span class="contAdd contMore">Source - <a href="javascript:;" class="contBelow" data-parent_id="<?php echo $data_reply['cont_id']; ?>">Contribute Below</a></span>
</section>
</div>
<?php } // if
} // end reply while
mysqli_data_seek($result_reply,0);
} // end main while ?>