![]() |
Сортировка
Вопрос
Мне нужно выводить 25 online серверов на 1 странице. Как мне это организовать P.S. В базе данных информация online offline сервера не хранится |
Если бы все выводило на 1 странице я знаю как выводить только online сервера
А мне нужно их разделить на страницы чтоб на 1 странице показывало примерно 25 серверов на другой так же и т.д. |
while ( $row = mysql_fetch_assoc($serv) ) {
... if ($st = "off") {} if ($st = "on") { выводит сервера } ... } |
Если я правильно тебя понял, ты хочешь сделать постраничный вывод. Гугли по запросам paging на php и php pagination.
|
Постраничный вывод я сделал, но он отображает все сервера как online так и offline а теперь мне нужно убрать offline и выводить только online
|
restart_05 Вы вначале определитесь, чего вы хотите и что у вас есть. Первый пост - вы говорите что онлайн/оффлайн в бд _НЕ_ хранится, в 4 посте что он там есть. Так если есть - то поправьте запрос к бд "SELECT тратата FROM тратата WHERE столбец_онлайна='ON'"
|
Мда... в 4 посте я показал свой запрос к базе если бы хранились то это было бы просто, они там не хранятся поэтому и спрашиваю
|
Бд есть mysql в ней записывается ip port но состояние сервера не сохраняется.
Мне нужно выводить только online сервера |
$data['status'] = "off";
$data['status'] = "on"; if ($data['status'] = "on") {} if ($data['status'] = "off") {} |
Если не постранично то я могу вывести все online сервера а так хЗ чет не получается
|
Я делаю выводить по 25 на страницу. Если я ставлю выводить только online сервера, то к примеру если 15 online на странице выведит 15 из 25 а не все 25, а мне нужно чтобы выводило все 25 online
|
НУ вначале же надо с бд взять а потом уже выводить вот в этом и проблема
|
Покажи свой запрос к БД. Если там MySQL или подобное, то достаточно добавить простое условие, давно бы уже помогли. Несколькими постами выше Gifts об этом же сказал.
|
$query_my = "SELECT * FROM `list` where type='$game' ORDER BY golos DESC LIMIT $offset,10";
$serv = mysql_query($query_my, $connect) or die(mysql_error()); while ( $row_my = mysql_fetch_assoc($serv) ) { } |
Сделай так для вывода только онлайн-серверов (если поле с информацией о статусе сервера называется status):
PHP код:
|
статус не хранится в базе
|
Тогда это проблемнее, так как мы не знаем, сколько серверов должно быть отображено на страницах, находящихся перед той, которую мы просматриваем. Как вариант - делать полную выборку всех серверов из БД и работать с полученным массивом. Но если их очень много, то это неоптимально. Еще один вариант - на странице при выводе сделать кнопку "Показать/Скрыть сервера оффлайн" для пользователей, ее функционал реализовать на JavaScript.
|
Цитата:
|
Над этим варинатом я думал но вначале мне кажется нужно решить эту проблему
|
Короче ни как да нельзя решить ? надо обязательно выводить в бд
|
Мне нужно вывести online сервера постраничным методом
Статус сервера не хранится в бд. Чтобы определить статус можно воспользоваться таким запросом Код:
$query = "SELECT * FROM `list` where type='cs' ORDER BY golos DESC LIMIT $offset,25"; |
не у кого нет предложений ???
|
1. В базе данных создаешь новую колонку - status, в которую будешь писать online или offline, или 1 и 0, или как хочешь.
2. SQL-запрос без лимит 25. Получаем список серверов из БД, делаем процедуру проверки на онлайн (в цикле, каждого сервера), примерный цикл: while (ля-ля) { тут процедура проверки на онлайн конкретного сервера тут процедура обновления БД, вставляем напротив конкретно текущего сервера статус - онлайн/офлайн } 3. Новый SQL-запрос, теперь спокойно выбираем только те, которые online, т.е. select * from lala where status='online' а дальше уже стандартная процедура - подсчет кол-ва полученных значений по запросу и вывод на экран с пагинацией, в зависимости от полученных результатов PS: Или тоже самое только с первым запросом, но результаты проверки на онлайн/офлайн заносить в массив (только те, кто онлайн), включая название сервера (все данные, что нужны для вывода), делать расчет кол-ва массива (каждый раз может быть разное), и выводить на экран в цикле с пагинацией как обычно (в принципе тоже самое, только без сохранения статуса где либо, что вряд ли имеет значение, ибо такие запросы делать постоянно - прикинь, зашли 100 даже человек одновременно, как думаешь, скоро у них отклик на F5 будет? Проще задать временной промежуток - т.е. создать в БД кроме колонки status еще колонку time, куда заносить последнее время проверки статуса, и при очередном запросе к сприпту проверять, если последнее время проверки было не больше 5 минут назад - просто выплевывать последние данные в соответствии с колонкой status. Ну или любой другой интервал - минута, 2 и т.д.) и написать "статус проверяется каждые n минут" -------------------------------------------------------------------- Код:
$query = "SELECT * FROM `list` where type='cs' ORDER BY golos DESC LIMIT $offset,25";вот это $query = "SELECT * FROM `list` where type='cs' ORDER BY golos DESC LIMIT $offset,25"; заменить на это: $query = "SELECT * FROM `list` where type='cs' ORDER BY golos DESC"; а дальше так примерно: if ( $data['status'] == "on") { $serv[][port] = $row['port']; $serv[][ip] = $row['ip']; } т.е. формуруем массив, в котором только те, кто онлайн. И только сейчас считаем кол-во значений полученного массива (т.е. у нас ВСЕ сереверы, кто ОНЛАЙН), а не только первые 25 (print_r ($serv);) а вот теперь постраничный вывод |
if ( $data['status'] == "on") {
$serv[][port] = $row['port']; $serv[][ip] = $row['ip']; } Вначале же берем ип порт с базу чтобы узнать статус on или off |
Цитата:
PHP код:
Цитата:
|
Все равно не получается мне кажется легче будет создать status cache и cache_time в бд и через определенное время обновлять эти данные
|
| Время: 06:41 |