我正在尝试将回复部分发送到我网站上的留言论坛。下面是我的代码,将被引用,让读者完全理解我在哪里以及我的问题是什么(我意识到这篇文章对于观众而言是漫长的,但我尽力做到准确,尽可能详细)。`
<?
$sqlMessage = "SELECT * FROM messages GROUP BY message_number";
$resultMessage = mysqli_query($conn, $sqlMessage);
if(mysqli_num_rows($resultMessage) > 0) {
while($rowMessagesDetails=mysqli_fetch_assoc($resultMessage)) {
$messageUsername = $rowMessagesDetails['username'];
$messageMessage = $rowMessagesDetails['message'];
$message_number = $rowMessagesDetails['message_number']; // using this number for the next part to find the replies
$messageDate = $rowMessagesDetails['date'];
//Getting ALL replies that match the message_number in the MESSAGES table
$sqlReply = "SELECT * FROM replies WHERE message_number='$message_number' ORDER BY date DESC";
$resultReply = mysqli_query($conn, $sqlReply);
if(mysqli_num_rows($resultReply) > 0) {
while($rowReplyDetails=mysqli_fetch_assoc($resultReply)) {
$replyUsername = $rowReplyDetails['username'];
$replyMessage = $rowReplyDetails['message'];
$replyDate = $rowReplyDetails['date'];
echo '<div class="user-details-box">
<div class="user-username">'.$messageUsername.'</div>
<div class="user-date">'.$messageDate.'</div>
</div>
<div class="user-message">'.$messageMessage.'</div>
<div class="reply-section">
<div class="replies">
<p class="reply-link-button left-replies">Reply </p>
<p class="bullet left-replies">•</p>
<p class="show-replies-link left-replies"> Show All Replies</p>
</div>
<div class="reply-details-box">
<div class="user-replies-box">
<div class="reply-username">'.$replyUsername.'</div>
<div class="reply-date">'.$replyDate.'</div>
</div>
<div class="reply-message">'.$replyMessage.'</div>
</div>
<form class="open-textbox" id="reply-form" action="reply.php" method="post">
<input type="hidden" class="message_number" name="message_number" value="'.$message_number.'">
<div class="right-reply">
<textarea id="getReply" class="insert-reply" name="reply" placeholder="Reply."></textarea>
<div class="right-reply-btn">
<button id="reply-link" class="reply-link" type="submit" name="submit">Reply</button>
</div>
</div>
</form>
</div>';
}
}
}
}
?>`
问题是,我试图找出我需要做什么来专门查询回复,以引用发布评论的用户;并在下面堆叠回复。我创建了一个 REPLIES 和 MESSAGES 表,每个表都有一个 message_number 来执行此操作(使用示例输入进行说明) :
MESSAGES TABLE
message_number: 1 //useful primary that we'll use in the REPLIES table
username: BuzzLightyear2018
message: Star Command do you read me?
date: 3/9/2018
REPLIES TABLE
reply_id: 1 //random primary to keep rows unique
message_number: 1 //foreign key from MESSAGES that connect the message with the reply
username: CowboyWoody2018
reply: No, but I've got a stick in my boot!
date: 3/9/2018
如何将重播表中的 message_number 与 MESSAGES中的 message_number 相匹配表格并显示 所有 在下面 回复此处的消息:
<div class="reply-details-box">
<div class="user-replies-box">
<div class="reply-username">**username from REPLIES here**</div>
<div class="reply-date">**date from REPLIES here**</div>
</div>
<div class="reply-message">**message from REPLIES here**</div>
</div>
重申: 我希望所有回复堆叠在来自 MESSAGES 的邮件下方;尝试查询 $ sqlMessage =&#34; SELECT * FROM messages GROUP BY message_number&#34; 和 $ sqlReply =&#34; SELECT * FROM回复WHERE message_number = &#39; $ message_number&#39; ORDER BY日期DESC&#34; 如下图所示:
This shows the same message twice because it's querying each reply to each message 有什么建议?提前谢谢。
答案 0 :(得分:0)
@IncredibleHat在两个点都是正确的。您应该可以删除GROUP BY
并获得相同的结果。此外,代码的PHP部分如下所示:
<?
$sqlMessage = "SELECT * FROM messages GROUP BY message_number";
$resultMessage = mysqli_query($conn, $sqlMessage);
if(mysqli_num_rows($resultMessage) > 0) {
while($rowMessagesDetails=mysqli_fetch_assoc($resultMessage)) {
$messageUsername = $rowMessagesDetails['username'];
$messageMessage = $rowMessagesDetails['message'];
$message_number = $rowMessagesDetails['message_number']; // using this number for the next part to find the replies
$messageDate = $rowMessagesDetails['date'];
echo '<div class="user-details-box">
<div class="user-username">'.$messageUsername.'</div>
<div class="user-date">'.$messageDate.'</div>
</div>
<div class="user-message">'.$messageMessage.'</div>'
'<div class="reply-section">
<div class="replies">
<p class="reply-link-button left-replies">Reply </p>
<p class="bullet left-replies">•</p>
<p class="show-replies-link left-replies"> Show All Replies</p>
</div>';
//Getting ALL replies that match the message_number in the MESSAGES table
$sqlReply = "SELECT * FROM replies WHERE message_number='$message_number' ORDER BY date DESC";
$resultReply = mysqli_query($conn, $sqlReply);
if(mysqli_num_rows($resultReply) > 0) {
while($rowReplyDetails=mysqli_fetch_assoc($resultReply)) {
$replyUsername = $rowReplyDetails['username'];
$replyMessage = $rowReplyDetails['message'];
$replyDate = $rowReplyDetails['date'];
echo '<div class="reply-details-box">
<div class="user-replies-box">
<div class="reply-username">'.$replyUsername.'</div>
<div class="reply-date">'.$replyDate.'</div>
</div>
<div class="reply-message">'.$replyMessage.'</div>
</div>';
}
}
echo '<form class="open-textbox" id="reply-form" action="reply.php" method="post">
<input type="hidden" class="message_number" name="message_number" value="'.$message_number.'">
<div class="right-reply">
<textarea id="getReply" class="insert-reply" name="reply" placeholder="Reply."></textarea>
<div class="right-reply-btn">
<button id="reply-link" class="reply-link" type="submit" name="submit">Reply</button>
</div>
</div>
</form>
</div>';
}
}
?>