@Sh3nku

Как реализовать постраничную навигацию с LEFT JOIN?

Доброго времени суток !

Есть две таблицы: users и addresses

Перво наперво ищем количество страниц:

mysqli_query('
SELECT count(*)
FROM users AS t1
LEFT JOIN addresses AS t2 ON t2.user_id = t1.id
');


Проблема появилось после выгрузки данных, получилось 70000 юзеров с 30000 адресами и запрос встал колом, ограничить просто пользователями нельзя, т.к. есть фильтр по странам / городам и в связи с этим количество страниц может меняться.

Может кто то что реализовывал и сталкивался с данной проблемой, заранее спасибо !
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Постраничная навигация с LEFT JOIN ничем не отличается от навигации с любым другим запросом.

Если запрос "встал колом", то его надо оптимизировать. Независимо от того, используется ли он для постраничной навигации, или нет. Начинать оптимизацию следует с выполнения запроса EXPLAIN
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
flapflapjack
@flapflapjack
на треть я прав
$page=is_numeric($_GET['page']) ? $_GET['page'] : 1;

$onpage=30;
$result=mysqli_query("
SELECT users.*,adresses*2
FROM users AS t1
LEFT JOIN addresses AS t2 ON t2.user_id = t1.id LIMIT ".($page-1)*$onpage.",".$onpage
);
if(mysqli_num_rows($result)>$onpage)
{
while ($row = mysqli_fetch_array($query)){
print $row['имя_поля']."<br>";//здесь выводите что вам надо
}
echo "Можно отрисовать ссылку на <a href=\"?page=".$page+1."\">следующую</a> страницу";
}
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы