1

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

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

1 回答 1

2

如果我理解您的问题,您想按最近的回复和最新的线程进行排序。如果没有有关您的表的更多信息,我无法为您提供确切的语法,但您的查询可能如下所示:

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;
于 2012-05-17T23:01:26.540 回答