在CodeIgniter中使用order_by和group_by不能按预期工作

时间:2014-03-07 18:15:23

标签: mysql codeigniter group-by greatest-n-per-group

我有一个测试结果表,每个用户和多个用户有多行。我希望为每个用户返回一行,其中包含他们所采取的“最新”测试的详细信息。我假设我可以使用order_by和group_by的组合在CodeIgniter中执行此操作,但是使用此方法不起作用,因为看起来CI忽略了order_by ...:?

$this->db->where('email','email@example.com');
    $this->db->order_by('test_date', 'DESC');
    $this->db->group_by('email');
    $tmp = $this->db->get('test_results');

如何在不必求助于其他查询的情况下克服此问题,但仍能够为每个用户返回“最新”测试中的所有数据?

1 个答案:

答案 0 :(得分:0)

您的问题与 greatest-n-per-group 标记相关,您需要获得每个用户最近的一个结果,这应该可以做到这一点,首先获取最大日期和电子邮件,然后使用自我加入像ON(t.email =tt.email AND t.test_date=tt.test_date)

这样的两个条件
SELECT t.* FROM 
test_results t
INNER JOIN (
SELECT email,MAX(test_date) test_date FROM test_results GROUP BY email
) tt ON(t.email =tt.email AND t.test_date=tt.test_date)
ORDER BY t.test_date DESC

在CI中,您可以使用查询功能来运行原始查询

$this->db->query("SELECT t.* FROM 
test_results t
INNER JOIN (
SELECT email,MAX(test_date) test_date FROM test_results GROUP BY email
) tt ON(t.email =tt.email AND t.test_date=tt.test_date)
ORDER BY t.test_date DESC");