php - Mysql 查询返回太多行

标签 php mysql

所以我有3个表都内部连接,我试图将讨论主题的讨论放在我的主页上,用户名和最新的讨论消息也放在主页上。

问题:查询正在返回附加到所有讨论的所有消息......我只需要与返回的讨论相关的最后一条消息。

我已经研究了一整天了,但无法弄清楚。我尝试过 group by 但这只是在 mysqli_fetch_array 上给了我一个错误

这是我的代码

$discussionquery = "SELECT discussion_messages.discussion_id, user_profile.first_name, user_profile.last_name, discussion_messages.message_text, case_discussion.discussion_title 
                        FROM `user_profile` 
                        INNER JOIN discussion_messages 
                        ON (user_profile.user_id = discussion_messages.user_id) 
                        INNER JOIN case_discussion 
                        ON (case_discussion.discussion_id = discussion_messages.discussion_id) 
                        WHERE discussion_messages.case_id = '$thecaseid' 
                        ORDER BY discussion_messages.message_id DESC";
    $discussionquerydata = mysqli_query($dbc, $discussionquery); 

    while ($row2 = mysqli_fetch_array($discussionquerydata)) {
    $discussion_id = $row2['discussion_id'];

    ?>
    <!-- Begin Recent Discussions -->  
    <div class="row">
      <a href="discussion.php?newfact=$thecaseid'>">
        <div class="col-xs-4 col-md-2">
          <img src="img/client4.jpg" class="profile_picture img-rounded">
          <?php echo '<h6 class="discussionname">' . $row2['first_name'] . ' ' . $row2['last_name'] . '</h6>';?>
        </div>
      </a>
      <div class="col-xs-8 col-md-10 discussion_title">
         <?php echo '<h5><a href="discussion.php?caseid='.$thecaseid.'&did='.$discussion_id.'"> '.$row2['discussion_title'].'</a> -'. $row2['message_text'];?></h5>           
        <h6 class="pull-right">Dec. 25</h6>
      </div>
    </div>
    <?php
    };

最佳答案

您需要逻辑来查找每个讨论的最后一条消息。编写此条件的方法不止一种。

下面使用 not contains 子句来执行此操作。这会检查是否没有具有较大 id 的消息可供讨论:

SELECT dm.discussion_id, up.first_name, up.last_name, dm.message_text, cd.discussion_title 
FROM `user_profile` up INNER JOIN
     discussion_messages dm
     ON (user_profile.user_id = dm.user_id) INNER JOIN
     case_discussion cd
     ON (cd.discussion_id = dm.discussion_id) 
WHERE dm.case_id = '$thecaseid' and
      not exists (select 1
                  from discussion_messages dm2
                  where dm2.discussion_id = dm.discussion_id and
                        dm2.message_id > dm.message_id
                )
ORDER BY dm.message_id DESC;

关于php - Mysql 查询返回太多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21506669/

相关文章:

php - 如何运行 php 脚本来发送推送通知

php - 无法连接 MYSQL,我做错了什么?

mysql - 如何使用MySQL的MAKETIME函数构造小于1小时的负时间?

php - 如果互联网连接丢失,则在本地保存 mysql 值

php - 多个查询字符串中的 SQL MAX()

PHP 查询无法使用表单

php - 将 mysql_result 变量转换为 mysqli 时遇到问题

MySQL 与 +(search query) 的匹配不起作用,但 +search +query 是

javascript - 我如何显示我的 table ?

PHP,防止删除前导零