簡體   English   中英

MySQL查詢返回太多行

[英]Mysql query returning too many rows

因此,我內部共有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
    };

一種建議是使用表別名。 總代碼量將更小且更易於理解。 使用limit子句返回1行。

$discussionquery = "
 SELECT 
   m.discussion_id, 
   u.first_name, 
   u.last_name, 
   d.message_text, 
   c.discussion_title                         
 FROM `user_profile` as u                       
 INNER JOIN discussion_messages as m
   ON (u.user_id = m.user_id) 
 INNER JOIN case_discussion c
   ON (m.discussion_id = c.discussion_id) 
 WHERE 
   m.case_id = '$thecaseid' 
 ORDER BY 
   m.message_id DESC
 LIMIT 1";

您需要邏輯來找到每個討論的最后一條消息。 編寫此條件的方法不止一種。

下面使用一個not exists子句來做到這一點。 這將檢查是否沒有討論的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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM