簡體   English   中英

當一個表中有多個相同的ID時,按一個ID排序

[英]ORDER BY one ID when there are more of the same ID's in one table

我有4張桌子:

  1. 用戶
  2. 論壇
  3. 討論(討論)
  4. 論壇豐富(消息)

表格Forumberichten(消息)包含“討論(討論)”表的ID,作為對討論的反應的參考。 如果對一個討論有5個反應,則表中有5個ID的值相同。

如何顯示每一個不同的討論的一個討論與它的最新反應的回聲?

我已經嘗試過ORDER BY,DISTICT,GROUP BY和其他方法,但是我無法使其正常工作。 我不斷從原始輸入中獲​​得更多來自同一討論或一個討論的輸出,而不是對它的最新反應。

<?php
// DISCUSSIES FORUM SCHRIJVEN

$sql="SELECT forumberichten.discussieid,forumberichten.datum,discussies.discussieid,discussies.titel,discussies.forumid,discussies.highlight,forums.forumid,forums.forumnaam,users.userid,users.userimage,users.username FROM forumberichten,discussies,forums,users WHERE forumberichten.discussieid=discussies.discussieid AND discussies.forumid=forums.forumid AND forumberichten.userid=users.userid AND forums.forumid=1  ORDER BY forumberichten.bericht_id DESC LIMIT 3";
    $result = $conn->query($sql) or die ("The query could not be completed. try again");
    if ($result->num_rows > 0) {

    echo "
    <br>
    <table id='forumschrijvenklein'>
    <tbody>
    <tr>
    <td bgcolor='#1E1E1E'></td>
    <td nowrap bgcolor='#1E1E1E'>&nbsp;</td>
    <td nowrap bgcolor='#1E1E1E' class='sterrenkleur'>Discussie</td>
    <td nowrap bgcolor='#1E1E1E' class='sterrenkleur'>Laatste reactie</td>
    <td nowrap bgcolor='#1E1E1E' class='sterrenkleur'>Datum</td>
    <td nowrap bgcolor='#1E1E1E' class='sterrenkleur'></td>
    </tr>
     ";

    // output data of each row
       while ($row = $result->fetch_assoc()) {

    echo" 
    <tr>";if ($row["highlight"] == '1') {
    echo " <td bgcolor='#FC6'></td>";
    } else {
    echo "<td bgcolor='#1E1E1E'></td>";
    }
    echo"
    <td nowrap bgcolor='#1E1E1E'>";if ($row["userimage"] == '') {
    echo "
    <a href='user.php? id=" . $row['userid'] . "'</a><img    src='Images/users/nopicture.png' alt='nopicture'  class='userimage-tooltip-small' title='".$row['username']."''></a>";
    } else {
    echo "<a href='user.php? id=" . $row['userid'] . "'</a><img src='Images/users/".$row['userimage']."' class='userimage-tooltip-small' title='".$row['username']."''></a>";
    }           
    echo"</td>
    <td bgcolor='#1E1E1E'><a href='discussie.php? id=" . $row['discussieid'] . "'>".$row["titel"]."</a></td>
    <td bgcolor='#1E1E1E'><a href='user.php? id=" . $row['userid'] . "'</a>".$row["username"]."</a></td>
    <td nowrap bgcolor='#1E1E1E'>"; echo date("d-m-y H:i",strtotime($row["datum"]));"
    ";
    echo"
    </td> 
    <td nowrap bgcolor='#1E1E1E'></td>
    </tr>
    ";
    }
    }
    echo " 
    <tr>
    <td bgcolor='#1E1E1E'>&nbsp;</td>
    <td bgcolor='#1E1E1E'>&nbsp;</td>
    <td bgcolor='#1E1E1E'><img src='Images/lijntransparant.png' width='315' height='2'></td>
    <td bgcolor='#1E1E1E'><img src='Images/lijntransparant.png' width='140' height='2'></td>
    <td bgcolor='#1E1E1E'>&nbsp;</td>
    <td bgcolor='#1E1E1E'>&nbsp;</td>
    </tr>
    </tbody>
    </table>
    ";  
    }
    ?>

我嘗試了以下操作,但仍然無法使用...:

$sql = "SELECT * 
FROM (((forumberichten

JOIN discussies
ON discussies.discussieid = forumberichten.discussieid) 

JOIN users
ON users.userid = forumberichten.userid)

JOIN forums
ON forums.forumid=forumberichten.forumid)

GROUP BY discussies.discussieid 
HAVING forumberichten.forumid = 3 AND forumberichten.bericht_id = max(forumberichten.bericht_id) 
ORDER BY forumberichten.bericht_id DESC";

我們想要每個唯一線程上的最新帖子,我們可以通過...

使用GROUP BYHAVING

SELECT * 
FROM Posts
JOIN Discussions
    on Discussions.discussion_id = Posts.discussion_id
GROUP BY Discussions.discussion_id
HAVING Posts.post_time = max(Posts.post_time)
ORDER BY Posts.post_time DESC

這是一個例子 確保使用它來修改自己的內容,盡管這很簡單。 我沒有數據庫可以對此進行測試,但是我已經用自己的數據和不同的列進行了測試,並且可以正常工作。

注意:這假定兩個表中的每個ID均相同。 它還假定post_time是某個時間值,該值會隨着發布的時間越近而增加(即SQL Timestamp)。

暫無
暫無

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

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