现在,我使用以下方法对论坛中的所有主题进行排序:
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");
答案 0 :(得分:1)
如果我理解您的问题,您希望按最近的回复和最新的主题进行排序。如果没有关于表的更多信息,我无法给出确切的语法,但您的查询可能如下所示:
SELECT *
FROM board
ORDER BY GREATEST(replyDateTime, creationDateTime)
LIMIT 50;
这使用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;