Страница 1 из 1

Сортировка при criteria->leftJoinTable

Добавлено: 2019.08.01, 00:14
Greengo86
Добрый вечер Всем! Помогите решить слудующу проблему:
Есть таблицы постов и Необходимо сделав leftJoinTable, выбрать связанный с постом комментарий! Но так как связь один-ко-многим, комментарий должен быть один и последний! Последний добавленый, а не последнее изменение в update_at!

Код: Выделить всё

$criteria->group = 'post.id';
$criteria->order = 'comments.id DESC';
Distinct, group и order результата не приносят!Либо приходят все записи комментариев или одна, но самая первая! Каким то образом это можно решить именно в DbCriteria?

Re: Сортировка при criteria->leftJoinTable

Добавлено: 2019.08.01, 10:12
Loveorigami
Попробуй так

Код: Выделить всё

Select p.*, c.text FROM post p
LEFT JOIN (Select Max(id) max_id, post_id FROM comments GROUP BY post_id) mc ON p.id = mc.post_id
LEFT JOIN comment с ON c.id = mc.max_id

Re: Сортировка при criteria->leftJoinTable

Добавлено: 2019.08.01, 10:24
Greengo86
Loveorigami,
Нельзя мне использовать чистый SQL - никак! Не было бы проблемы, если бы можно было... А каким образом использовать директиву MAX во вложенном SELECT...

Код: Выделить всё

$criteria->leftJoinTable('comments', 'com.posted_id = re.id', 'com');
Нашёл как можно использоваться MAX в criteria, но это также не спасает! Возвращает также первый комментарий...

Re: Сортировка при criteria->leftJoinTable

Добавлено: 2019.08.04, 20:26
Greengo86
Ни у кого больше нет вариантов? Возможно нужно применить 2 join'а. Но как именно