ЗАКАЗАТЬ по одному идентификатору, если в одной таблице больше одинаковых идентификаторов

У меня 4 таблицы:

  1. пользователей
  2. Форумы
  3. Обсуждения (дискуссии)
  4. Forumberichten (сообщения)

Таблица Forumberichten (сообщения) содержит идентификатор таблицы обсуждений (дискуссий) в качестве ссылки на реакции на обсуждение. Если есть 5 реакций на обсуждение, в таблице есть 5 идентификаторов с одинаковым значением.

Как показать эхо одного обсуждения каждого разговора с последней реакцией на него?

Я пробовал 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("dmy 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 BY и HAVING .

 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 

Это пример ! Убедитесь, что вы используете его, чтобы изменить свое, но это довольно просто. У меня нет базы данных для проверки этого, но я тестирую свои данные и разные столбцы, и это сработало.

Примечание. Предполагается, что каждый идентификатор идентичен в обеих таблицах. Он также предполагает, что post_time – это некоторое значение времени, которое увеличивает более позднюю запись (например, временную метку SQL).