我的网站上有一个页面,打印出数据库中所有的客户名称和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>";
}
我添加了一张图片,希望可以使其更容易理解。
更新#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>";
}
}
}
这使我按照报告日期的顺序回呼了客户一次。
但是!这没有按我的预期工作。因为,是的,它按日期顺序排序,但是它首先将报告分组,因此它采用最后出现的日期并出现在回显中。这将是该客户有记录的第一个日期。与我想要的相反。
我还没有找到改变分组顺序的方法。如果可能的话..
它也不会接听没有报告的任何客户。
答案 0 :(得分:0)
这可能不是问题的答案,但这至少使我的项目可行。 我没有使用SQL命令从报表中选择最后一个日期并将其与客户列表合并,而是从另一端开始采用了一种新方法。
我有另一个项目,我需要对网站上的帖子进行排序,并且在每次移动时都将帖子设置为特定的排序值。
我使用了这个版本,并在此问题上插入了它。因此,现在当我执行报告时,我还将当前时间戳记插入客户的“ last_report”中,因此现在当我检查客户列表时,我什至不需要调用报告,而只需按last_report排序即可与ASC和DESC一起订购。
这可能是对数据库的不良使用,但它可以正常工作,并且整个周期内数据库问题的总数仍然相同。