笨;活动记录类

时间:2012-07-23 20:17:28

标签: php mysql codeigniter join sql-order-by

你好我的问题是我只想获取'last _...'的最后一个主题。一个简单的order_by将无法工作,因为它将对论坛进行排序,这是我不想要的。我到目前为止的代码。我在CodeIgniter的内置Active Records中执行此操作。

return $this->db->select('forums.*,')
        ->select('Count(topics.id) threads, Count(replies.id) replies')
        ->select('topics.url last_post_url, topics.name last_post_name, topics.created last_post_date')
        ->select('users.url user_url, users.name user_name, ranks.name user_rank')
        ->from('forums')
        ->join('topics', 'topics.f_id = forums.id', 'left')
        ->join('replies', 'replies.t_id = topics.id', 'left')
        ->join('users', 'users.id = topics.a_id', 'left')
        ->join('ranks', 'users.status = ranks.id','left')
        ->group_by('forums.id')
        ->get()
        ->result();

如果不清楚我想要做什么; 我希望它能够获得论坛,我想在每一行中添加数字或主题(工作),回复数量(工作)以及最后一篇文章的制作者。

原始查询

SELECT `forums`.*, Count(topics.id) threads, Count(replies.id) replies, `users`.`url` user_url, `users`.`name` user_name, `ranks`.`name` user_rank
FROM (`forums`)
LEFT JOIN `topics` ON `topics`.`f_id` = `forums`.`id`
LEFT JOIN `replies` ON `replies`.`t_id` = `topics`.`id`
LEFT JOIN `users` ON `users`.`id` = `topics`.`a_id`
LEFT JOIN `ranks` ON `users`.`status` = `ranks`.`id`
GROUP BY `forums`.`id` 

2 个答案:

答案 0 :(得分:0)

我认为您需要使用result_array()代替result()。我可能错了,但这就是我的意思。

另外,我建议你做的是使用PHPMyAdmin或你使用的任何东西创建SQL请求,这样你就可以真正看到你对请求的结果,然后将其“翻译”为CodeIgniter语法。

答案 1 :(得分:0)

您是否尝试过用户指南中的$ row = $ query-> last_row():http://codeigniter.com/user_guide/database/results.html