Как получить единственную последнюю запись с определенным идентификатором в codeigniter

Здесь у меня есть 2 таблицы. Первый покупатель и второй на это членство

Теперь я просто хочу получить последнюю запись с определенным customer_id из этих jioned таблицы (клиент и членство).

Вот моя структура таблицы клиентов

введите описание изображения здесь

Вот моя структура таблицы членства и желаемые последние вставленные строки

введите описание изображения здесь

Здесь я попробовал код сам

    $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;

}

}

Но он возвращает все строки из обеих соединенных таблиц. но я хочу только последние (последние) строки с каждым идентификатором клиента ..!

Пожалуйста, скажите мне, где я иду не так. Спасибо

2

Решение

Чтобы получить последнюю запись для каждого клиента из таблицы членства на основе наибольшего идентификатора, вы можете самостоятельно присоединиться к членству, настроив присоединяющуюся часть следующим образом:

$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->result();
к этому :
$dataa = $query->row();

0

По вопросам рекламы [email protected]