我正在尝试对我网站上的消息论坛进行回复。以下是我的代码,将分几部分引用这些代码,以使读者充分了解我的位置以及所要提出的问题(我意识到这篇文章对观察者来说很冗长,但是我尽了最大努力做到准确和详尽。) `

<?
   $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&nbsp;</p>
                                <p class="bullet left-replies">&bull;</p>
                                <p class="show-replies-link left-replies">&nbsp;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


如何将REPLIES表中的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 =“ SELECT * FROM messages GROUP BY message_number”和$ sqlReply =“ SELECT * FROM FROM WHERE message_number ='$ message_number'ORDER BY date DESC”时得到的所有信息,如下图所示:

This shows the same message twice because it's querying each reply to each message
有什么建议么?先感谢您。

最佳答案

@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&nbsp;</p>
                                <p class="bullet left-replies">&bull;</p>
                                <p class="show-replies-link left-replies">&nbsp;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>';
            }
        }
?>

关于php - 答复部分的逻辑如何与PHP和MySQL配合使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49200238/

10-12 12:20
查看更多