一尘不染

凹凸系统(显示最近显示的主题,并在顶部显示回复)

sql

现在,我使用以下命令对论坛中的所有主题进行排序:

SELECT * FROM board ORDER BY id DESC LIMIT 50

这显示了在顶部创建的最新线程,但是我将如何显示具有最新答复的线程,同时又在顶部显示一个新线程?

例子:

  1. 这是一个新线程
  2. 这是一个旧线程
  3. 这是一个旧线程

到:

  1. 这是一个带有新回复的旧主题
  2. 这是一个没有回复的新话题
  3. 这是一个旧线程

如果有帮助,这是回复代码:

$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");

阅读 126

收藏
2021-05-16

共1个答案

一尘不染

如果我理解您的问题,那么您希望同时按照最近的回复和最新的话题进行排序。如果没有有关表的更多信息,我无法为您提供确切的语法,但是您的查询可能看起来像这样:

SELECT *
FROM board
ORDER BY GREATEST(replyDateTime, creationDateTime)
LIMIT 50;

它使用该GREATEST函数按replyDateTimecreationDateTime…对每个行进行排序,以较新的为准。

编辑:

将您的回复信息保存在单独的表格中,您的查询可以使用左联接,然后为板中的每个帖子选择最新的回复…,然后用于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;
2021-05-16