根据上次在另一个表中使用的结果对表结果进行排序

时间:2018-12-04 14:24:04

标签: php mysql codeigniter

我的网站上有一个页面,打印出数据库中所有的客户名称和ID,以便在完成工作后向另一个数据库报告。

该功能我想对客户进行排序,以使该列表按客户上次在报表中使用的时间顺序进行排序。最新报告将使报告客户在我的结果客户中排名第一的位置。

我正在使用Codeigniter,我的控制器具有以下代码:

$data['reports'] = $this->db->get('reports');

$data['customers'] = $this->db->get('customers');

$this->load->view('list', $data);

那在我看来就是这样:

foreach($customers->result() as $customer){ 
   echo "<option value='".$customer->id."'>".$customer->name."</option>";
}

我添加了一张图片,希望可以使其更容易理解。

enter image description here

更新#1:

所以我在下面的评论中提供了帮助:

控制器:

$this->db->group_by('customer');
$this->db->order_by('date', DESC);
$data['reports'] = $this->db->get('reports');

$data['customers'] = $this->db->get('customers');

$this->load->view('list', $data);

查看:

foreach($reports->result() as $rep){ 
    foreach($customers->result() as $customer){
        if($rep->customer == $customer->id){
            echo "<option value='".$customer->id."'>".$customer->name."</option>";
        }
    }
}

这使我按照报告日期的顺序回呼了客户一次。

enter image description here

但是!这没有按我的预期工作。因为,是的,它按日期顺序排序,但是它首先将报告分组,因此它采用最后出现的日期并出现在回显中。这将是该客户有记录的第一个日期。与我想要的相反。

我还没有找到改变分组顺序的方法。如果可能的话..

它也不会接听没有报告的任何客户。

1 个答案:

答案 0 :(得分:0)

这可能不是问题的答案,但这至少使我的项目可行。 我没有使用SQL命令从报表中选择最后一个日期并将其与客户列表合并,而是从另一端开始采用了一种新方法。

我有另一个项目,我需要对网站上的帖子进行排序,并且在每次移动时都将帖子设置为特定的排序值。

我使用了这个版本,并在此问题上插入了它。因此,现在当我执行报告时,我还将当前时间戳记插入客户的“ last_report”中,因此现在当我检查客户列表时,我什至不需要调用报告,而只需按last_report排序即可与ASC和DESC一起订购。

这可能是对数据库的不良使用,但它可以正常工作,并且整个周期内数据库问题的总数仍然相同。