[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Статические переменные
Telez
Мне для пагинации нужно посчитать количество строк, чтобы потом разбить из на страницы.
Это нужно сделать только один раз при первой загрузки страницы.
Я поставил статическую переменную со значением true/false, но похоже это не работает.
Как можно запустить код только один раз?
sg.com
по идее, переменную нужно где-то сохранить и потом просто считывать ее при следующих загрузках этой страницы
FatCat
Смотря где и как хранятся строки.
Например, в движке форума, топики — строки в таблице топиков, а сообщения — строки в таблице сообщений.
При добавлении или удалении сообщения, количество сообщений с топике пересчитывается, и затем пишется в строку топика в таблице топиков.
Это удобно. При любом обращении к топику мы сразу имеем и количество сообщений в нем.

_____________
Бесплатному сыру в дырки не заглядывают...
Telez
У меня квартиры по городам.
Я не могу сохранять каждый раз их количество.
Т.к. по фильтру получаю каждый раз другой результат.
И мне каждый раз приходиться пересчитывать кол-во квартир чтобы разбить их на страницы пагинации.
sg.com
почему не можете, это можно сделать, например в сессию или в файл (что то вроде хеширования)
Telez
Например, могут выбрать квартиры с ванной (50 шт), или с душем (100 шт).
Т.е каждый раз надо пересчитывать.
FatCat
Цитата (Telez @ 12.12.2021 - 20:12)
Я не могу сохранять каждый раз их количество.
Т.к. по фильтру получаю каждый раз другой результат.

В куки записать?

_____________
Бесплатному сыру в дырки не заглядывают...
Michael
Цитата (Telez @ 12.12.2021 - 22:42)
Т.е каждый раз надо пересчитывать.

Ну так пересчитывай. Один запрос - это что проблема?


_____________
There never was a struggle in the soul of a good man that was not hard
Telez
Так весь вопрос как сделать запрос только один раз?
sergeiss
Цитата (Telez @ 13.12.2021 - 22:14)
Так весь вопрос как сделать запрос только один раз?

Тебе же уже ответили, по сути дела smile.gif Надо только собрать все ответы вместе.
1. При первом обращении ПО ДАННОМУ ФИЛЬТРУ подсчитываешь количество и пишешь его в сессию.
2. При всех последующих обращениях именно по этому фильтру (и этим пользователем), к другой странице, просто берёшь количество из сессии.
3. При смене фильтра повторяешь п.1.

Как определить, что это тот же фильтр? Так же записывать его в сессию! И при обращении сравнивать все параметры, поступившие в запросе и сохраненные. Если перечень параметров сохранился, если величины параметров те же, то фильтр не изменён. Берём количество из сессии и возвращаем его (п.2 из списка выше).
Если же изменился список параметров ЛИБО изменилась какая-то величина хотя бы одного параметра, то смотрим п.3.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Telez
Но как обратиться только один раз? Поставить статическую переменную?


static $run_first_time = true;

if($run_first_time){
$run_first_time = false;
.....


}
kaww
Telez, ты неправильно понимаешь, что такое статичные переменные и как они работают в ПХП. Они не подходят для решения задачи. Как уже сказали выше, можно использовать сессии. Как-то так:
$filter = $_GET['filter'];//Это все параметры фильтра из запроса. Очевидно, что у тебя это может быть как-то немного иначе

$filterId = md5(serialize($filter));

if (empty($_SESSION['current_filter']) || $_SESSION['current_filter'] != $filterId) {//Пришел запрос с новым фильтром, значит нужно посчитать количество записей и сохранить это в сессию
$count = total_items($filter);
$_SESSION['filter_items_total'] = $count;
$_SESSION['current_filter'] = $filterId; // сохраним и id фильтра, чтобы при следующем запросе с ним не делать total_items()
} else {//Если это тот же фильтр, что был и в прошлом запросе, то достаем количество записей из сессии
$count = $_SESSION['filter_items_total'];
}
echo "Всего найдено квартир: {$count}";
killer8080
Telez
кеширование это всегда компромисс между производительностью и актуальностью данных. Запрос на подсчёт критичен и требует много ресурсов? Преждевременная оптимизация это зло user posted image
Если во время навигации по страницам будут добавлены новые объявления подходящие под фильтр посетитель их не увидит, или отрежет хвост и не увидит старые объявления в конце.
PS кстати совсем не обязательно результат подсчёта сохранять в куках или в сессии, достаточно добавить его как параметр в урл страниц пагинатора
...&page=2&total_pages=20
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.