Пагинат cakePHP с левым соединением приводит к неверному количеству страниц - PullRequest
0 голосов
/ 15 октября 2010

У меня проблема с разбиением на страницы cakePHP, особенно когда я выполняю левое соединение. Возвращается 6 строк, и с пределом нумерации страниц в 3, он должен рассчитывать 2 страницы, но он рассчитывает 3 страницы, причем последняя страница пуста. Вот массив опций, который я передаю в paginate:

Array
(
    [fields] => Array
        (
            [0] => DISTINCT Video.id, Video.thumbnail_img, Video.title, 
                   Video.description, Video.tags, Video.views, Video.date,
                   ((
                       SELECT COUNT(Rating.id) 
                       FROM ratings AS Rating 
                       WHERE Rating.rating = 1 AND Rating.video_id = Video.id
                    ) - 
                    (
                       SELECT COUNT(Rating.id) 
                       FROM ratings AS Rating 
                       WHERE Rating.rating = 0 AND Rating.video_id = Video.id
                    )
                   ) AS avgRating
        )

    [joins] => Array
        (
            [0] => Array
                (
                    [table] => ratings
                    [alias] => Rating
                    [type] => LEFT
                    [conditions] => Array
                        (
                            [0] => Rating.video_id = Video.id
                        )

                )

        )

    [order] => Array
        (
            [avgRating] => DESC
        )

)

Есть идеи, почему это происходит? Я не уверен ни в каком другом способе получить желаемые результаты без использования объединения, но держу пари, что именно это и вызывает проблему.

Любые предложения будут оценены. Спасибо!

1 Ответ

0 голосов
/ 15 октября 2010

Глупая проблема - в этом случае объединение даже не требуется. Те же результаты достигаются без объединения, так как подзапросы могут оцениваться самостоятельно. Для этого примера это нормально, но могут быть и другие примеры, где необходимо объединение, и ошибка подсчета сохраняется. В любом случае, моя проблема решена!

...