Codeigniter GROUP BY和SELECT MAX

时间:2013-04-24 10:11:14

标签: php codeigniter select activerecord group-by

这有点难以描述,但现在就去了。

我正在使用codeigniter从表中选择maintenance_jobs并加入另一个名为maintenance_job_items的表,maintenance_job_items是该特定作业的更新列表。

表格如下

MAINTENANCE JOBS
|-------|-----------|--------------|
| index | job_title | date_created |
|-------|-----------|--------------|
 
MAINTENANCE_JOB_ITEMS
|-------|-----------------------|-------------|--------------|
| index | maintenance_job_index | description | date_updated |
|-------|-----------------------|-------------|--------------|

我需要能够返回所有维护作业以及maintenance_job_items表中的最新更新,然后使用codeigniter的活动记录按date_updated DESC排序。我试过group_byselect_maxorder_by等,但似乎无法得到我想要的东西。任何帮助将不胜感激,如果您不理解我要求的内容,请说出来,因为我发现它有点难以解释。

2 个答案:

答案 0 :(得分:0)

试试这个:

$this->db->select("mj.*, mi.date_updated");
$this->db->from('maintenance_job as mj');
$this->db->join('maintenance_job_items as mi','mj.index=mi.maintenance_job_index','left');
$this->db->order_by('mi.date_updated');

尝试//echo $this->db->last_query();检查查询是否正确。

答案 1 :(得分:0)

解决方案:1

 $this->db->select('MAINTENANCE_JOBS.*,MAINTENANCE_JOB_ITEMS.date_updated');
 $this->db->join('MAINTENANCE_JOBS', 'MAINTENANCE_JOBS.index = MAINTENANCE_JOB_ITEMS.index');
 $this->db->group_by("MAINTENANCE_JOBS.index"); 
 $this->db->order_by("MAINTENANCE_JOBS.date_updated", "desc"); 
 $kd = $this->db->get('MAINTENANCE_JOB_ITEMS');
    $result_array = array();
    foreach ($kd->result_array() as $row)
    {
        $result_array[] = $row;
    }

echo '<pre>'
print_r($result_array);
echo '</pre>'

解决方案:2

 $this->db->distinct('MAINTENANCE_JOBS.*,MAINTENANCE_JOB_ITEMS.date_updated');
 $this->db->join('MAINTENANCE_JOBS', 'MAINTENANCE_JOBS.index = MAINTENANCE_JOB_ITEMS.index');
$this->db->order_by("MAINTENANCE_JOBS.date_updated", "desc"); 
$kd = $this->db->get('MAINTENANCE_JOB_ITEMS');
    $result_array = array();
    foreach ($kd->result_array() as $row)
    {
        $result_array[] = $row;
    }

 echo '<pre>'
 print_r($result_array);
 echo '</pre>'