@kirill-93

Постраничная навигация. Как она устроена?

Объясните Пожалуйста, как работает постраничная навигация. про лимит в sql я знаю, меня интересует другое. Обычная ситуация: две таблицы - товары и свойства товаров. У товара может быть много свойств, а может и не быть совсем. И вот, для экономии ресурсов мы выбираем товары и джоиним к ним свойства. Но как в таком случае лимитить товары, например чтобы их было двадцать на странице? Ведь мы не знаем сколько строк придет в результате? На похожий вопрос в интернете посоветовали группировать результат, но ведь тогда просто вырежутся все свойства. Объясните кому не трудно.
  • Вопрос задан
  • 2259 просмотров
Решения вопроса 1
AMar4enko
@AMar4enko
Делаете запрос товаров с лимитом. Получаете N товаров. Берете их ID, делаете запрос свойств.
Свойства по сохраненному в них ID товара рассовываете в ранее полученные сущности товаров. Возвращаете эти сущности.
По-другому никак, только 2 запроса с объединением в скрипте. Если посмотрите AR в Yii, то там при запросе связанных сущностей они вытаскиваются отдельными запросами по ID родительской сущности. Там есть специальный параметр together, который позволяет вам принудительно вытащить связанные сущности через JOIN. В этом случае, об этом гласит сама документация Yii, не можете полагаться на limit в выборке, потому как limit будет применен к результирующему набору данных, который по размеру будет равен исходному только если связь была один-к-одному.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
KorsaR-ZN
@KorsaR-ZN
Для постраничной навигации обычно считают конечное число результатов, и делят его на число элементов на страницы, получается кол-во страниц.

А то, что вы свойства товара джойните в обычном запросе, отсюда у вас же получаются дубли товара по разным свойствам. Это не правильный поход, свойства нужно о дельно получать для каждого товара. Хотя, как у Вас там устроена система, я не знаю, так что в Вашем случаи такой подход может и верный :)
Ответ написан
Комментировать
Я сайт как-то видел название какое-то простое типа paginator.ru но как сейчас не ищу не могу его найти (вот что значит программисты без SEOшников делали ))) может кто подскажет?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы