php - 创建论坛,并尝试按时间戳对两个表进行排序。一张表主题和其他回复。我该如何对这些进行排序?

标签 php mysql sql sorting

我正在尝试按时间戳对我为论坛创建的两个表进行排序。

我已经搜索过,但还没有运气。请帮忙。

我的第一个表是“forum_posts”,时间戳是“forum_timestamp” 我的第二个表是“forum_posts_replys”是“fpr_timestamp”

通过以下查询,我可以按时间戳或其他进行排序,但我想对两者进行排序。如果某个主题中还没有任何回复并且刚刚发布,我希望在顶部看到它,但如果另一个主题中有回复,我希望首先显示该回复。

                (SELECT fp.*, fpr.*
            FROM forum_posts fp
            LEFT JOIN forum_posts_replys fpr
            ON fp.forum_post_id = fpr.fpr_post_id
            WHERE `fp`.`forum_id`='$f_id'
            GROUP BY fp.forum_post_id)
            ORDER BY `forum_timestamp` DESC

我也尝试过 GREATEST() 但没有成功。

我尝试使用它的页面是主要主题列表页面。该页面仅显示主题及其标题、回复数量以及每个主题发布的时间。

我当前的查询 2014 年 6 月 14 日:

                SELECT sub.*
            FROM
            (SELECT 
             fp.forum_post_id as forum_post_id, fp.forum_id as forum_id, 
             fp.forum_user_id as forum_user_id, fp.forum_title as forum_title, 
             fp.forum_content as forum_content, fp.forum_edit_date as forum_edit_date,
             fp.forum_timestamp as forum_timestamp, fpr.id as id,
             fpr.fpr_post_id as fpr_post_id, fpr.fpr_id as fpr_id,
             fpr.fpr_user_id as fpr_user_id, fpr.fpr_title as fpr_title,
             fpr.fpr_content as fpr_content, fpr.fpr_edit_date as fpr_edit_date,
             fpr.fpr_timestamp as fpr_timestamp,
             ifnull(fpr.fpr_timestamp,forum_timestamp) as tstamp
            FROM forum_posts fp
            LEFT JOIN forum_posts_replys fpr
            ON fp.forum_post_id = fpr.fpr_post_id
            WHERE `fp`.`forum_id`='$f_id'
            GROUP BY fp.forum_post_id) sub

            ORDER BY tstamp DESC

似乎仍然只按forum_timestamp排序

最佳答案

使用子查询。

        SELECT fp.*, fpr.*
        from

        (SELECT fp.*, fpr.*, ifnull(fpr.fpr_timestamp,forum_timestamp) as tstamp
        FROM forum_posts fp
        LEFT JOIN forum_posts_replys fpr
        ON fp.forum_post_id = fpr.fpr_post_id
        WHERE `fp`.`forum_id`='$f_id'
        GROUP BY fp.forum_post_id) sub

        order by tstamp desc

编辑:显式列出所需字段并使用子查询的表别名:

        SELECT sub.*
        from

        (SELECT fp.field_1 as f1, fp.field_2 as f2, fpr.field_1 as f3, fpr.field_2 as f4, ifnull(fpr.fpr_timestamp,forum_timestamp) as tstamp
        FROM forum_posts fp
        LEFT JOIN forum_posts_replys fpr
        ON fp.forum_post_id = fpr.fpr_post_id
        WHERE `fp`.`forum_id`='$f_id'
        GROUP BY fp.forum_post_id) sub

        order by tstamp desc

关于php - 创建论坛,并尝试按时间戳对两个表进行排序。一张表主题和其他回复。我该如何对这些进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24209594/

相关文章:

mysql - 改进 SQL 查询

mysql - 开始日期及结束日期的 SQL 语句

mysql - 如何在 SQL 中为 YEAR 编写 NOT IN 语句

php - 将字符串数组写入由换行符分隔的文本文件

java - 用 Java 或 PHP 编写的 CMS,允许导出为静态 HTML 页面

php - 如何在 Glpi 框架上创建自定义表单字段

phpmyadmin。自动登录

一个结果中包含多个值的 MySQL 查询

javascript - 使用 AJAX 和 PHP 检查(下载)文件是否存在

php - 如何根据类别限制和显示结果?