【发布时间】:2018-12-04 14:24:03
【问题描述】:
我的网站上有一个页面,可以打印出数据库中的所有客户姓名和 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:
所以我在下面的 cmets 的帮助下解决了这个问题:
控制器:
$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>";
}
}
}
这让我按照报告日期的顺序回复了一次客户。
但是!这不像我想要的那样工作。因为,是的,它按日期排序,但它首先对报告进行分组,因此它采用最后出现的日期并出现在回显中。这将是为该客户记录的第一个日期。与我想要的相反。
我还没有想出一种方法来更改处理分组的顺序。如果这是可能的话..
此外,它不会接收任何没有报告的客户。
【问题讨论】:
-
您可以通过
$this->db->order_by("id", "asc");订购 -
我认为您并没有完全理解。我知道如何做一个普通的 sort_by,但是如何根据另一个表的内容来做是我的问题。 :)
-
好的,你能详细说明你的问题吗?
-
@moiamserru:我不确定你是如何在 codeigniter 中实现这一点的——但一般的 MySQL 方法是使用 JOIN 语句和 Sort By 将两个表组合在一个查询中。您确实需要确保两个 ID 相互引用。更多细节可能在这里:stackoverflow.com/questions/15200548/…
-
所以在普通的 MySQL 中:
Select * from customers join reports on customers.name = reports.name order by reports.date DESC;或者我在这里遗漏了什么?
标签: php mysql codeigniter