按查询分组仅返回最新结果 - Codeigniter

时间:2013-12-09 20:31:49

标签: mysql codeigniter date group-by

我有以下查询,我想检索每个组的最早/最晚日期。

每个小组可以有许多在不同日期旅行的成员,所以我想知道这些成员之间该组中最早的日期是什么。同样,这是对所有现有组完成的,然后按所选顺序显示。

这是我正在使用的查询:

public function sortByDate($order, $year)
    {
        $this->db->select('groups.*, general_info.proposed_date_of_arrival');
        $this->db->from('groups');
        $this->db->join('general_info', 'general_info.group_id = groups.group_id');
        $this->db->where('YEAR(groups.group_year)', $year);
        $this->db->group_by('groups.group_id');
        $this->db->order_by("general_info.proposed_date_of_arrival", $order);
        $val = $this->db->get();
    }

但是上面只返回并比较每个组的最新/最近的条目,这不是应该生成的查询类型。

结果的输出:

array (size=2)
      0 => 
        array (size=5)
          'group_id' => string '2' (length=1)
          'group_leader_name' => string 'Bob' (length=7)
          'group_year' => string '2013-11-01' (length=10)
          'year' => string '2013' (length=4)
          'proposed_date_of_arrival' => string '2014-02-22' (length=10)
      1 => 
        array (size=5)
          'group_id' => string '1' (length=1)
          'group_leader_name' => string 'John' (length=7)
          'group_year' => string '2013-11-12' (length=10)
          'year' => string '2013' (length=4)
          'proposed_date_of_arrival' => string '2014-12-15' (length=10)

这两个测试组实际上分别有两个成员,第一组中最早的一个是2013-12-31的建议到达日期,而第二组中最早的是2014-01-19。

按升序排序的实际输出应为2013-12-31日期为首的组,以及日期为2014-01-19的组为下一组。但是,我得到了上面的数组结果,即比较最近的两个成员,而不是考虑所有成员提议的日期。如何在所有成员日期之间进行比较?

1 个答案:

答案 0 :(得分:0)

认为这是解决方案

public function sortByArrivalDateASC($year)
    {
        $this->db->select('groups.*, MIN(date(general_info.proposed_date_of_arrival)) as proposed_date_of_arrival');
        $this->db->from('groups');
        $this->db->join('general_info', 'general_info.group_id = groups.group_id');
        //$this->db->where('YEAR(groups.group_year)', $year);
        $this->db->group_by('group_id');
        $val = $this->db->get();
    }

我错过了分组的聚合函数。我认为我不需要实施降序,因为我们只想知道离开的最早时间。

Thanks to GROUP_BY MySQL referencethis w3schools explanation