加入收藏 | 设为首页 | 会员中心 | 我要投稿 甘南站长网 (https://www.0941zz.com/)- 科技、行业物联网、开发、云计算、云管理!
当前位置: 首页 > 数据库 > MySql > 正文

php C 如何使用MySQL Join通过上次回复对论坛帖子进行排序?

发布时间:2023-12-14 17:21:29 所属栏目:MySql 来源:DaWei
导读: 我在为此编写查询时遇到了一些麻烦.我想我有基本的逻辑,虽然我可能没有.我想要做的是根据用户正在查看的主板获取所有线程,然后根据上次回复的时间对这些线程进行排序.查询不返回任何错误,它

我在为此编写查询时遇到了一些麻烦.我想我有基本的逻辑,虽然我可能没有.我想要做的是根据用户正在查看的主板获取所有线程,然后根据上次回复的时间对这些线程进行排序.查询不返回任何错误,它只获取最近更新的线程.

这是我的查询:

$query = " SELECT t.child_id,t.thread_id,m.thread_id,m.message_id,m.date_posted FROM forum_threads AS t LEFT JOIN forum_messages AS m ON t.thread_id = m.thread_id WHERE t.child_id = ".$board_id." ORDER BY m.date_posted DESC LIMIT ".$starting.",".$this->user['results_per_page'];

这是要返回的查询:

SELECT t.child_id,m.date_posted FROM forum_threads AS t LEFT JOIN forum_messages AS m ON t.thread_id = m.thread_id WHERE t.child_id = 2 ORDER BY m.date_posted DESC LIMIT 0,15

更新

我试图采用ethrbunny建议的想法,尽管我完全迷失了导致它返回错误的原因.

$query = " SELECT t.board_id,t.thread_id FROM forum_threads AS t LEFT JOIN ( SELECT m.thread_id,m.message_id FROM forum_messages AS m WHERE m.thread_id = t.thread_id ORDER BY m.message_id DESC LIMIT 1 ) AS q WHERE t.board_id = ".$board_id." ORDER BY q.date_posted DESC LIMIT ".$starting.",".$this->user['results_per_page']; You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE t.board_id = 4 ORDER BY q.date_posted DESC LIMIT' at line 11 最佳答案 SELECT ...,MAX(m.date_posted) AS latest_reply ... GROUP BY t.thread_id ORDER BY latest_reply DESC ...

但是为什么date_posted是一个TEXT?不应该是日期时间,或者可能是int(如果是时间戳)

因为永远无法在文本列上优化运行MAX,所以建议使用

MAX(m.message_id) AS latest_reply

相反,作为消息可能以日期顺序插入,应该是等效的.

编辑添加:
查询全部写完……

$query = " SELECT t.thread_id,title,MAX(m.message_id) AS latest_reply FROM forum_threads AS t LEFT JOIN forum_messages AS m ON t.thread_id = m.thread_id WHERE t.child_id = ".$board_id." GROUP BY t.thread_id ORDER BY latest_reply DESC LIMIT ".$starting.",".$this->user['results_per_page'];

(编辑:甘南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章