【发布时间】:2013-06-16 02:38:24
【问题描述】:
我在为此编写查询时遇到了一些麻烦。我想我有基本的逻辑,虽然我可能没有。我想要做的是根据用户正在查看的版块获取所有线程,然后根据他们上次回复的时间对这些线程进行排序。查询不返回任何错误,它只获取最近更新的线程。
这是我的查询:
$查询 = " 选择 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." 按 m.date_posted DESC 排序 限制 ".$starting.", ".$this->user['results_per_page'];这是正在返回的查询:
选择 t.child_id、t.thread_id、m.thread_id、m.message_id、m.date_posted FROM forum_threads AS t 左加入 forum_messages AS m ON t.thread_id = m.thread_id 哪里 t.child_id = 2 ORDER BY m.date_posted DESC LIMIT 0, 15更新
我尝试采用 ethrbunny 建议的想法,但我完全不知道导致它返回错误的原因。
$查询 = " 选择 t.board_id, t.thread_id FROM forum_threads AS t 左连接( 选择 m.thread_id,m.message_id FROM forum_messages AS m 哪里 m.thread_id = t.thread_id 按 m.message_id DESC 排序 限制 1 ) 作为 q WHERE t.board_id = ".$board_id." ORDER BY q.date_posted DESC 限制 ".$starting.", ".$this->user['results_per_page'];您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 11 行的“WHERE t.board_id = 4 ORDER BY q.date_posted DESC LIMIT”附近使用正确的语法
【问题讨论】:
-
您是否只想在每个线程中发送一条消息,然后按最新消息/线程对整个列表进行排序?
-
如果你还在苦苦挣扎,请考虑提供一个 sqlfiddle。
-
ethrbunny 或 kickstart 值得赏金,有正确的解决方案。您在更新中发布的信息不足以解决问题。如果您在运行查询之前回显 $query,您将看到您正在调试的确切语句,而不是微不足道的 mysql SQL 语法错误。也许在'as q'之后添加'on(t.thread_id = q.thread_id)'
-
您想要来自 forum_messages 表的任何详细信息(例如 message_id)吗?如果不是,那么 barryhunter 的解决方案很好,但如果你这样做,那么它不会给出正确的结果。