right outer join
right outer join
Сделал связь между моделями с right outer join. Все прекрасно пока результаты не выводятся с помощью пагинатора. Например если в результате запроса 3 записи, а у пагинатора количество элементов на странице 10, то выводится еще 7 лишних строк. Это из-за того что он устанавливает лимит 10. Так вот с какой стороны решать, придумывать запрос без right join или эту проблему можно обойти самим yii?
Re: right outer join
это то же самое. тот же результат если использовать INNER JOIN. проблема не в том что запрос не правильно выполняется, а в том что когда в результате строк меньше чем лимит, то добавляются лишние строки.
виджет CListView например пишет "Элементы 1—10 из 2".
виджет CListView например пишет "Элементы 1—10 из 2".
Re: right outer join
right join , видимо, подразумевает связь один-ко-многим типа:
и соответствующий стандартный запрос:
к сожалению, это не пойдет на связях has many && many many.
тут можно пойти двумя путями:
1) не выбирать элементы, но делать right join для фильтрации типа
а нужные строки получить через lazy load
2) сделать свою реализацию пагинации - узнавать , сколько будет приджойненных строк на один элемент основной таблицы запросом типа
и уже из него считать пагинацию, типа:
и получить запрос:
Код: Выделить всё
foo has many bar:
Код: Выделить всё
select foo.* , bar.* from from foo right join bar on (...) limit 2,2
тут можно пойти двумя путями:
1) не выбирать элементы, но делать right join для фильтрации типа
Код: Выделить всё
post::model()->findAll(array(
"criteria" => array(
"join" => "right join comments c on t.id = c.post_id"
)
));
2) сделать свою реализацию пагинации - узнавать , сколько будет приджойненных строк на один элемент основной таблицы запросом типа
Код: Выделить всё
select count(*) from commerce_product_section s
right join commerce_product p on s.id = p.section_id
group by s.id
----------------------------------------
4
5
12
4
5
Код: Выделить всё
pages = 5, offset(2) : 4+5 , limit(2) 12+4
Код: Выделить всё
select foo.* , bar.* from from foo right join bar on (...) limit 16,9