在MySQL中按最新发布日期订购

在MySQL中按最新发布日期订购,mysql,sql-order-by,Mysql,Sql Order By,我有以下代码: $result = mysql_query("SELECT f_type.`id` AS type_id, f_type.`name` AS type_name, f_thread.`id` AS thread_id, f_thread.`uid`, f_thread.`title` AS thread_title, f_thread.`hits`, u.`username` FROM `forum_type` AS f_type LEFT JOIN `forum_threa

我有以下代码:

$result = mysql_query("SELECT 
f_type.`id` AS type_id,
f_type.`name` AS type_name,
f_thread.`id` AS thread_id,
f_thread.`uid`,
f_thread.`title` AS thread_title,
f_thread.`hits`,
u.`username`

FROM `forum_type` AS f_type
LEFT JOIN `forum_thread` AS f_thread
ON f_type.`id` = f_thread.`type_id` 
LEFT JOIN `users` AS u
ON u.`id` = f_thread.`uid` 
LEFT JOIN `forum_posts` AS f_posts
ON f_posts.`type_id` = f_thread.`id`    

WHERE f_type.`id` = '".$_GET['type_id']."'
ORDER BY f_posts.`date` DESC
") or die (mysql_error());  
这是关于一个论坛,我希望线程被排序,就像检查哪个帖子是这个论坛最新的

我使用forum_类型(f_类型)作为论坛的子类别,它是顶级类别。所以它的层次结构如下所示:

  • 论坛
  • 论坛式
  • 论坛线程
  • 论坛帖子
  • 就像我在代码中写的查询一样,我想按最新的发布日期订购。。。但它不是按那个顺序排列的。我不知道到底是什么人点的。。。看不到一个计划。我想这个问题是由这些多重连接引起的,但我不确定


    如果有任何建议,我将不胜感激

    如果要列出线程,可能需要按线程分组,并为每个线程选择最大发布日期

    SELECT 
    f_thread.`id` AS thread_id,
    f_thread.`uid`,
    f_thread.`title` AS thread_title,
    f_thread.`hits`,
    u.`username`,
    max(f_posts.date) as last_post_date
    
    FROM `forum_thread` AS f_thread
    LEFT JOIN `users` AS u
    ON u.`id` = f_thread.`uid` 
    LEFT JOIN `forum_posts` AS f_posts
    ON f_posts.`type_id` = f_thread.`id`    
    
    WHERE f_thread.type_id = ".$_GET['type_id']."
    
    GROUP BY thread_id
    ORDER BY last_post_date DESC
    

    希望有帮助。f_posts.type_id有点可疑,可能表中有一个线程id?

    很抱歉给您带来任何混乱。我认为这篇文章一开始是正确的。但是,它不是那样工作的。悲哀地连接是否太多或连接类型是否错误?取决于您尝试执行的操作。。。如果您想单独列出每个论坛类型中的线程,您可能不想加入这些类型,而是先选择类型,然后在单独的查询中选择线程。但这与此无关,查询应该可以工作,问题是我只是猜测模式,所以除非你更具描述性,否则我可以提出更多建议。我的目标方案类似于www.php.de上的论坛。我认为“论坛类型”就是一个例子,叫做“支持”。这种论坛类型的顶级类别是“论坛”表,例如,它被命名为“一般讨论”。因此,我目前正在“支持”中概述所有线程。我只想按每个帖子中每个帖子的最新日期排序显示的帖子。我不知道怎样才能更具描述性。。。但我正在努力。你知道我的意思吗?我编辑我的回复,你可能不应该查询那里的论坛类型,如果你想要这些信息,我建议你单独查询。除此之外,如果它不起作用,您能告诉我们查询的输出是什么,或者您得到了什么错误消息吗?如果没有任何结果,请尝试设置ini\U set(“显示错误”,1);错误报告(E_全部);在查询之前