当一个表中有更多相同的ID时,按一个ID排序

时间:2015-08-04 13:53:01

标签: php mysql

我有4张桌子:

  1. 用户
  2. 论坛
  3. 讨论(讨论)
  4. Forumberichten(留言)
  5. 表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";
    

1 个答案:

答案 0 :(得分:0)

我们希望每个唯一主题上的最新帖子,我们可以通过...

使用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时间戳)。