|
|
|
| Доброго времени суток! Столкнулся вот с такой проблемой.... У меня есть таблица, не большая, записей на 400. вывожу я их на сайте постранично, по 20 записей используя lim. Сейчас передо мной стоит задача вывода их в случайном порядке, но все так же постранично....... И вот тут капец! | |
|
|
|
|
|
|
|
для: shel71
(28.03.2013 в 12:21)
| | проще всего использовать ORDER BY RAND() LIMIT 20 | |
|
|
|
|
|
|
|
для: Valick
(28.03.2013 в 12:41)
| | тогда он будет в случайном порядке выводить только содержимое каждой конкретной страницы. И у 324 строки шансы попасть на третью страницу = 0 | |
|
|
|
|
|
|
|
для: shel71
(28.03.2013 в 12:21)
| | вам придется сохранять результаты первой случайной выборки между запросами пользователя. Раз вы говорите, что таблица не большая, то можно прямо в сессию все выбранные ID записей записывать. И при следующем запросе, например, при переходе на вторую страницу, выбирать соответствующие ID из сессии и по ним выбирать данные из базы.
или вообще сразу всю выборку клиенту отдавать и листалку на js сделать.
или только все ID передавать клиенту и ajax'ом по этим id на сервере выборку делать. | |
|
|
|
|
|
|
|
для: Igorek
(28.03.2013 в 13:02)
| | Блин, а ведь правда.... Можно один раз сделать выборку RAND и записать в массив в том порядке, какой получится, а потом просто обращаться к этому массиву с 1 по 20 для первой страницы, 21-30 для второй и так далее...... Ajaxом все подгружать. Попробую развить эту тему. Вопросы. Массив из например тысячи значений - это не много? насколько ресурсоемко? Просто это мой первый проект, я самоучка. вопрос второй... при переходе по страницам надо будет 20 раз обращаться к sql | |
|
|
|
|
|
|
|
для: shel71
(28.03.2013 в 13:15)
| | 1. тысяча - это вряд ли много.
2. почему 20 раз? Если вы на клиенте храните массив ID'шников, то из них выбрав 20 нужных - отправляете их на сервер, где одним запросом все 20 записей сразу выбираете. | |
|
|
|
|
|
|
|
для: Igorek
(28.03.2013 в 13:35)
| | Ну да, это я тупанул простой запрос типа ... WHERE id IN (1,2,...,n) ... Можно совсем обнаглеть и попросить совет? в каком виде лучше хранить результаты первой случайной выборки? Если создать массив, то если человек переходит на другую любую страницу (например контакты), а потом возвращается на страницу с выводом записей, то сортировка будет заново. Значит надо хранить в файле или создать для этого временную табличку. и привязать например куками это посетите на конкретный файл или таблицу? Что более производительно? | |
|
|
|
|
|
|
|
для: shel71
(28.03.2013 в 13:39)
| | Проще всего в сессию сериализованный массив записать | |
|
|
|
|
|
|
|
для: Igorek
(28.03.2013 в 15:13)
| | Спасибо за помощь, все сделал!!!
<?
session_start();
if (!isset ($_SESSION["sort_moll"]))
{
include("../sql.php");
$res=mysql_query("SELECT id FROM `partner` order by RAND()");
while($row = mysql_fetch_array($res))
{
$sort_moll="$sort_moll,'$row[id]'";
}
$sort_moll=substr($sort_moll,1);
$_SESSION["sort_moll"]=$sort_moll;
}
?>
$res = mysql_query("SELECT * FROM `partner` id IN ($_SESSION[sort_moll]) ORDER BY FIELD (id,$_SESSION[sort_moll])"); | |
|
|
|