现在,我使用以下命令对论坛中的所有主题进行排序:
SELECT * FROM board ORDER BY id DESC LIMIT 50
这显示了在顶部创建的最新线程,但是我将如何显示具有最新答复的线程,同时又在顶部显示一个新线程?
例子:
这是一个新线程 这是一个旧线程 这是一个旧线程
到:
这是一个带有新回复的旧主题 这是一个没有回复的新话题 这是一个旧线程
如果有帮助,这是回复代码:
$sql="INSERT INTO reply (id, name, subject, maintext, ip, date, img) VALUES ('$idid','$name','$subject','$maintext','$encoded','$date','$image_name')"; if (!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); } mysql_query("UPDATE board SET replycount = replycount + 1 WHERE id = $idid");
如果我理解您的问题,那么您希望同时按照最近的回复和最新的话题进行排序。如果没有有关表的更多信息,我无法为您提供确切的语法,但是您的查询可能看起来像这样:
SELECT * FROM board ORDER BY GREATEST(replyDateTime, creationDateTime) LIMIT 50;
它使用该GREATEST函数按replyDateTime或creationDateTime…对每个行进行排序,以较新的为准。
GREATEST
replyDateTime
creationDateTime
编辑:
将您的回复信息保存在单独的表格中,您的查询可以使用左联接,然后为板中的每个帖子选择最新的回复…,然后用于GREATEST选择帖子的创建日期或最新的回复的职位。
/* You will need to specify all your columns in board instead of using * */ SELECT b.ID, b.CreationTimeStamp, MAX(r.CreationTimestamp) FROM board b LEFT JOIN replies r ON r.BoardID = b.ID /* Include all your columns in your select from board here in your group by */ GROUP BY b.ID, b.CreationTimeStamp ORDER BY GREATEST(b.CreationTimestamp, MAX(r.CreationTimestamp)) LIMIT 50;