[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: постраничная навигация + случайность
Guest
как правильно сделать выборку в такой ситуации

Сейчас у меня постр. навигация просто тупо режет какую-то часть (LIMIT) , но проблема в том, что если ставить на запрос сортировку по случайности, то перелистывая страницы - мы часто будет натыкаться на один и тот же контент на разных страницах.

Не могу сообразить как так сделать, чтобы майскуэл на каждой странице выбирал только контент, которого не было при предыдущей выборке(на других страницах).

у меня есть какая-то идея, но из-за нехватки опыта, я не знаю насколько она осуществима.
Перед выборкой создать "временную таблицу" на основе текущей, "размешать" там контент, и выборку делать уже из этой "таблицы". Что-то в этом духе можно сделать?





Спустя 3 минуты, 43 секунды (16.11.2010 - 16:34) linker написал(а):
А нафига рандомная сортировка нужна?

Спустя 50 секунд (16.11.2010 - 16:35) glock18 написал(а):
Цитата
Не могу сообразить как так сделать, чтобы майскуэл на каждой странице выбирал только контент, которого не было при предыдущей выборке(на других страницах).


задача вообще рекурсивна получается. сейчас надо сделать, чтобы не показывало те, которые были в предыдущей выборки, а после нужно будет, чтобы не показывало результаты из предыдущих n выборок. в любом случае, нужно сначала понять, чего хочется, более подробно.

ПС: факт совмещения сортировки рандомом и постраничной навигации вижу впервые. где это вообще надо?

Спустя 2 минуты, 58 секунд (16.11.2010 - 16:38) Guest написал(а):
linker
странноватый вопрос)
как мне кажется, ты это спрашиваешь, из-за проблем с производительностью?

glock18

ну как в первый раз?))
Никогда не видел на сайтах сортировку в случайном порядке?)) добавь сюда постраничную навигацию, вот и получается проблема.

Спустя 5 минут, 57 секунд (16.11.2010 - 16:44) linker написал(а):
Рандомная сортировка с постраничным выводом действительно случай уникальный. Код запроса в студию.

Спустя 2 минуты, 25 секунд (16.11.2010 - 16:46) Guest написал(а):
linker
но может подумаете над этим?

я не очень хороший знаток mysql, но что-то мне подсказывает, там должно быть что-то типа "образов таблиц" что ли.

На сайте нужна возможность упорядочить контент в случайном порядке.

Спустя 2 минуты, 15 секунд (16.11.2010 - 16:49) linker написал(а):
Ну у тебя уже есть запрос, так дай сюда, а мы посмотрим как это у тебя случайная сортировка изображена. Если уж так хочется напрячь мускул бесполезной работой то ORDER BY RAND(), а результаты кэшируй.

Спустя 4 минуты, 5 секунд (16.11.2010 - 16:53) Guest написал(а):
$navigate = new postNavigation();
$length=$navigate -> get_length ($count, 10);

$contentQuery=mysql_query("SELECT * FROM content ORDER BY RAND() LIMIT $length");


сейчас я тупо написал RAND() , но я читал, что при большом объеме таблицы она убивает производительность, и смотрел как люди с этим борятся, но сейчас вопрос не в этом.

Спустя 3 минуты, 57 секунд (16.11.2010 - 16:57) linker написал(а):
Повторюсь, кэшируй результаты и бери из кэша при переходе по страницам. Но это не просто убивает, просто уничтожает ядерным взрывом, нафига такие грабли непонятно.

Спустя 20 минут, 53 секунды (16.11.2010 - 17:18) Guest написал(а):
linker
ладно, будем смотреть, спасибо.

Спустя 7 минут, 2 секунды (16.11.2010 - 17:25) Guest написал(а):
а что раньше обрабатывается ORDER или LIMIT ?

Спустя 5 часов, 6 минут, 2 секунды (16.11.2010 - 22:31) linker написал(а):
LIMIT всегда отрабатывает в конце. Даю подсказку.
1. Есть поле id и значение страницы передается ее номером
$Page = isset($_GET['page']) ? abs($_GET['page']) : 1;
$PerPage = 20;
if (isset($_SESSION['CacheIds']))
{
$Offset = ($Page - 1) * $PerPage;
$RangeIds = array_slice($_SESSION['CacheIds'], $Offset, $PerPage);
$Result = mysql_query("SELECT * FROM `table` WHERE `id` IN (" . join(',', $RangeIds) . ")");
}
else
{
$Result = mysql_query("SELECT * FROM `table` ORDER BY RAND()");
$CacheIds = array();
while($Row = mysql_fetch_assoc($Result))
$CacheIds[] = $Row['id'];
$_SESSION['CacheIds'] = $CacheIds;
}
Это только намек.

Спустя 21 минута, 21 секунда (16.11.2010 - 22:52) twin написал(а):
Я вот тоже пытаюсь осмыслить - не выходит.
Случайность такого плана предполагает возможность получения на следующей странице того же практически контента?

Тогда для чего постраничка как таковая... Можно сделать фейк и просто выдавать по 10 случайных записей к примеру.

Если случайно нужно расположить результат постраничного вывода (перемешать 10 полученных записей), то это стоит сделать на стороне PHP и не мучаться с запросами.

Спустя 53 минуты, 32 секунды (16.11.2010 - 23:46) Guest написал(а):
linker
twin
да ребят, спасибо большое.
все варианты рассмотрел, которые вы сказали. И решил, действительно вывести 10 случайных, без постраничной навигации, просто внизу кнопочка ПОКАЗАТЬ ЕЩЕ.(тупо обновляем страничку с рандомом и все)

Спустя 16 минут, 57 секунд (17.11.2010 - 00:03) linker написал(а):
В том-то и проблема, что с рандомом в "ПОКАЗАТЬ ЕЩЕ" могут появится результаты из предыдущего запроса.

Спустя 35 минут, 2 секунды (17.11.2010 - 00:38) Guest написал(а):
linker
знаю, но в данном случаи это уже не катастрофично, так как подобное поведение с пост-навигацией было бы глупостью, а так вроде как ничего страшного и нет.

Но если вдруг понадобится полная неповторимость - то я усек и твою мысль и мысль Твина.
Быстрый ответ:

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