我正在尝试按时间戳对我为论坛创建的两个表进行排序。
我已经搜索过,但还没有运气。请帮忙。
我的第一个表是“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/