Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: выборка в случайном порядке
 
 автор: shel71   (28.03.2013 в 12:21)   письмо автору
 
 

Доброго времени суток! Столкнулся вот с такой проблемой.... У меня есть таблица, не большая, записей на 400. вывожу я их на сайте постранично, по 20 записей используя lim. Сейчас передо мной стоит задача вывода их в случайном порядке, но все так же постранично....... И вот тут капец!

  Ответить  
 
 автор: Valick   (28.03.2013 в 12:41)   письмо автору
 
   для: shel71   (28.03.2013 в 12:21)
 

проще всего использовать ORDER BY RAND() LIMIT 20

  Ответить  
 
 автор: shel71   (28.03.2013 в 12:51)   письмо автору
 
   для: Valick   (28.03.2013 в 12:41)
 

тогда он будет в случайном порядке выводить только содержимое каждой конкретной страницы. И у 324 строки шансы попасть на третью страницу = 0

  Ответить  
 
 автор: Igorek   (28.03.2013 в 13:02)   письмо автору
 
   для: shel71   (28.03.2013 в 12:21)
 

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

или вообще сразу всю выборку клиенту отдавать и листалку на js сделать.
или только все ID передавать клиенту и ajax'ом по этим id на сервере выборку делать.

  Ответить  
 
 автор: shel71   (28.03.2013 в 13:15)   письмо автору
 
   для: Igorek   (28.03.2013 в 13:02)
 

Блин, а ведь правда.... Можно один раз сделать выборку RAND и записать в массив в том порядке, какой получится, а потом просто обращаться к этому массиву с 1 по 20 для первой страницы, 21-30 для второй и так далее...... Ajaxом все подгружать. Попробую развить эту тему. Вопросы. Массив из например тысячи значений - это не много? насколько ресурсоемко? Просто это мой первый проект, я самоучка. вопрос второй... при переходе по страницам надо будет 20 раз обращаться к sql

  Ответить  
 
 автор: Igorek   (28.03.2013 в 13:35)   письмо автору
 
   для: shel71   (28.03.2013 в 13:15)
 

1. тысяча - это вряд ли много.
2. почему 20 раз? Если вы на клиенте храните массив ID'шников, то из них выбрав 20 нужных - отправляете их на сервер, где одним запросом все 20 записей сразу выбираете.

  Ответить  
 
 автор: shel71   (28.03.2013 в 13:39)   письмо автору
 
   для: Igorek   (28.03.2013 в 13:35)
 

Ну да, это я тупанул простой запрос типа ... WHERE id IN (1,2,...,n) ... Можно совсем обнаглеть и попросить совет? в каком виде лучше хранить результаты первой случайной выборки? Если создать массив, то если человек переходит на другую любую страницу (например контакты), а потом возвращается на страницу с выводом записей, то сортировка будет заново. Значит надо хранить в файле или создать для этого временную табличку. и привязать например куками это посетите на конкретный файл или таблицу? Что более производительно?

  Ответить  
 
 автор: Igorek   (28.03.2013 в 15:13)   письмо автору
 
   для: shel71   (28.03.2013 в 13:39)
 

Проще всего в сессию сериализованный массив записать

  Ответить  
 
 автор: shel71   (29.03.2013 в 15:11)   письмо автору
 
   для: 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])");

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования