凹凸系统(显示最近回复的主题)

时间:2012-05-17 22:51:47

标签: php mysql sql

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

SELECT * FROM board ORDER BY id DESC LIMIT 50

这显示了在顶部创建的最新线程,但是如何显示最近回复的线程,但是还在顶部显示了一个新线程?

示例:

  
      
  1. 这是一个新主题
  2.   
  3. 这是一个旧帖子
  4.   
  5. 这是一个旧帖子
  6.   

致:

  
      
  1. 这是一个带有新回复的旧帖子
  2.   
  3. 这是一个没有回复的新主题
  4.   
  5. 这是一个旧帖子
  6.   

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

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

1 个答案:

答案 0 :(得分: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;