【问题标题】:How to get single last record with a particular id in codeigniter如何在codeigniter中获取具有特定ID的最后一条记录
【发布时间】:2018-05-10 13:46:27
【问题描述】:

这里有 2 张桌子。第一个是customer,第二个是membership

现在我只想从这些 jioned 表(客户和会员)中获取带有特定 customer_id 的最后一条记录。

这是我的客户表结构

这是我的会员表结构和所需的最新插入行

这里我自己试过一个代码

    $results="";
        $this->db->select('customer.*,membership.*');
        $this->db->from('customer');
        $this->db->join('membership', 'customer.id = membership.customer_id', 'left'); 
       /* $this->db->order_by('membership.id','DESC');
        $this->db->limit('1');*/
        $query = $this->db->get();
        $data = $query->result_array();


$todayDate =  date("d-m-Y"); 
foreach ($data as $value) { 

    $this->db->select('customer.*,membership.*');
        $this->db->from('customer');
        $this->db->join('membership', 'customer.id = membership.customer_id', 'left'); 
        $this->db->where('membership.customer_id', $value['customer_id']);
        $this->db->order_by('membership.customer_id','DESC');

        $this->db->limit('1');
        $query = $this->db->get();
        $dataa = $query->result();

     foreach ($dataa as $values) {

            $date1 = new DateTime($todayDate);
            $date2 = new DateTime($values->end_date);

            $diff=date_diff($date1,$date2);
         $days =  $diff->format("%a"); 
         $pos =  $diff->format("%R");

        if($pos == "+" && $days >= 0){

            $item[] = $values;

        }         

    }

但它返回两个连接表中的所有行。但我只想要每个客户 ID 的最新(最后)行..!

请告诉我哪里出错了。谢谢

【问题讨论】:

    标签: php mysql codeigniter greatest-n-per-group


    【解决方案1】:

    要根据最高 id 从会员表中获取每个客户的最后一条记录,您可以通过调整加入部分来自我加入会员,例如

    $this->db->select('c.*,m.*');
    $this->db->from('customer as c');
    $this->db->join('membership as m', 'c.id = m.customer_id', 'left'); 
    $this->db->join('membership as m1', 'm.customer_id = m1.customer_id AND m.id < m1.id', 'left'); 
    $this->db->where('m1.id IS NULL', null, false)
    $query = $this->db->get(); 
    

    普通的 SQL 类似于

    SELECT c.*,m.*
    FROM customer AS c 
    LEFT JOIN membership AS m ON c.id = m.customer_id 
    LEFT JOIN membership AS m1 ON m.customer_id = m1.customer_id 
                   AND m.id < m1.id
    WHERE m1.id IS NULL
    

    【讨论】:

      【解决方案2】:

      改变这个:
      $dataa = $query-&gt;result();
      对此:
      $dataa = $query-&gt;row();

      【讨论】:

      • 它的返回错误尝试获取非对象的属性
      • 不要在该行之后使用 foreach 循环,因为它已经是一个对象,而是直接访问它:$dataa-&gt;end_date
      猜你喜欢
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 2013-10-24
      • 2012-01-23
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      相关资源
      最近更新 更多