Как выбрать все данные из основной таблицы на основе данных строки максимальной записи ее подробной таблицы - PullRequest
0 голосов
/ 17 июня 2020

У меня есть таблица с двумя записями и подробная таблица с несколькими записями, связанными с основной таблицей.

Записи можно добавлять или удалять.

Я хочу показать все 2 записи, когда текущая роль пользователя не равна 18.

И когда текущая роль пользователя равна 18, показывать только 1 запись из основной таблицы, чья подробная таблица макс. Запись связана с основной записью, имеющей userId 78.

это мой код:

$this->db->select('BaseTbl.*');
$this->db->from('table1 as BaseTbl');
if($this->roleId == '18'){
    $this->db->where('(select table2.userId from table2 where table2.masterId = BaseTbl.id ORDER BY table2.id DESC LIMIT 1)', '78');
}

Я пробовал это до сих пор:

$this->db->select('BaseTbl.*');
$this->db->from('table1 as BaseTbl');
$this->db->join('table2 as table2','table2.masterId = BaseTbl.id','left');
if($this->roleId == '18'){
    $this->db->where('table2.userId', $this->userId);
    $this->db->where('table2.id', 'max(id)');
}

Теперь показывает эту запись userId 78, но не последняя из указанных c запись основной таблицы.

1 Ответ

0 голосов
/ 17 июня 2020

Мне удалось получить желаемый результат, используя это.

$this->db->select('BaseTbl.*');
$this->db->from('table1 as BaseTbl');
$this->db->join('table2 as table2','table2.masterId = BaseTbl.id','left');
if($this->roleId == '18'){
    $this->db->where('table2.userId', $this->userId);
    $this->db->where('table2.id = (select max(table2.id) from table2 where masterId = BaseTbl.id)');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...