【问题标题】:Sort table result based on result of last used in another table根据上次在另一个表中使用的结果对表结果进行排序
【发布时间】: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-&gt;db-&gt;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


【解决方案1】:

这可能不是问题的答案,但它至少使我的项目工作。 我没有使用 SQL 命令从报告中挑选出最后一个日期并将其与客户列表结合起来,而是采用了一种新方法。

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

我使用了它的一个变体并将它插入到这个问题上。所以现在当我做报告时,我还将当前时间戳插入到客户的“last_report”中,所以现在当我检查客户列表时,我什至不需要调用报告,而只需要按 last_report 排序即可用 ASC 和 DESC 排序。

这可能是对数据库的错误使用,但它确实有效,并且整个循环中的数据库问题总数仍然相同。

【讨论】:

  • 如果这“可能不是问题的答案”,如您所说,那么这可能不是发布它的正确位置。如果它没有回答这个问题,我建议你也问一个单独的问题,自己回答并链接到这个问题以供参考。另外,大家都喜欢code。请添加一些内容以更好地解释您的意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 2012-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多