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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: постраничная навигация при случайной выборке

Сообщения:  [1-7] 

 
 автор: kolobokk   (04.07.2006 в 14:12)   письмо автору
 
   для: Trianon   (04.07.2006 в 14:00)
 

спасибо

   
 
 автор: Trianon   (04.07.2006 в 14:00)   письмо автору
 
   для: kolobokk   (04.07.2006 в 13:34)
 


for($i = 30; $i < 40; $i++)
   echo $array[$i]['name'];

   
 
 автор: kolobokk   (04.07.2006 в 13:34)   письмо автору
 
   для: Trianon   (04.07.2006 в 12:28)
 

нет ну почему же врядли поможет..
можно добавить условие типа

if (empty($_GET['start']))
{
// делаем выборку, формируем массив и записываем его в сессию
}
else 
// листаем массив, который уже есть в сессии


вопрос остается открытым Как мне сделать выборку из массива, например с 30 по 40 записи?

   
 
 автор: Trianon   (04.07.2006 в 12:28)   письмо автору
 
   для: elenaki   (04.07.2006 в 11:38)
 

Боюсь, это врядли поможет. Если, конечно, не засовывать взятый массив куда-нибудь в сессию... Запрос второй страницы приведет к тому, что данные будут извлечены заново, причем в совершенно другом порядке.

Можно привязать случайность к сессии и более простым способом.
написав что-нибудь вроде "SELECT .... ORDER BY MD5(CONCAT(id, '$session_id')) LIMIT ...."

   
 
 автор: kolobokk   (04.07.2006 в 12:09)   письмо автору
 
   для: elenaki   (04.07.2006 в 11:38)
 

то есть так?

<? 
// Запрашиваем общее число отображаемых сообщейний 
    
$query "SELECT id FROM tour  order by rand()  "
     
$tot mysql_query($query); 
    
// Общее число отображаемых сообщений 
    
$countmysql_num_rows($tot); 

// формируем массив индексов 
while ($fot=mysql_fetch_array($query)) 

$catalog[]=$fot[id];
}
//записываем  массив в сессию
$_SESSION['catalog']=$catalog;


и затем постранично листаем...
вот только как? Помогите пож-та с массивом разобраться. Как мне сделать выборку из массива, например с 30 по 40 записи?

   
 
 автор: elenaki   (04.07.2006 в 11:38)   письмо автору
 
   для: kolobokk   (04.07.2006 в 11:05)
 

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

   
 
 автор: kolobokk   (04.07.2006 в 11:05)   письмо автору
 
 

Здравствуйте.
Такая ситуация - у меня есть таблица в БД в которой хранится информация о товарах и есть страница razdel.php, которая представляет собой каталог с постраничной навигацией.
Если показывать товары вподряд или отсортировано по какому-нибудь признаку навигация работает нормально, а вот с меня требуют чтобы товары выводились в случайном порядке :( Делаю в запросе

 order by rand()

все тоже работает, только вот загвоздка - на каждой странице навигации 1,2,3 выборка получается случайной и, следовательно, смысл постраничной навигации пропадает. Как мне быть?
Вот код выборки

<?
// Запрашиваем общее число отображаемых сообщейний
    
$query "SELECT * FROM tour ";
     
$tot mysql_query($query);
    
// Общее число отображаемых сообщений
    
$countmysql_num_rows($tot);
            
// Запрашиваем сами сообщения
    
$sql="SELECT * FROM tour  order by rand() limit $start ,$anumber ";
    
$result mysql_query($sql);


а вот код навигации

<?
//Показываем навигацию
print '<table width=100%><td  ALIGN=center>';
 if (
$start != 0) print "<A href=razdel.php?start=".($start $anumber)."&".SID." alt=Предыдущие><img src=images/24bb.gif border=0 valign=absmiddle alt=Предыдущие></A><font size=1>ПРЕДЫДУЩИЕ </font>";
 if (
$count >= $start+$anumber||$start != 0)
 {
 for (
$i=1; ; $i++)
 {
if (
$i==$_GET['start']+$anumber||($i==1&&empty($_GET['start']))) 
print 
"&nbsp;&nbsp;<font size=1>".$i."</font>";
else 
print 
"&nbsp;&nbsp;<A href=razdel.php?start=".($i*$anumber-$anumber)."&".SID."><font size=1>".$i."</font></A>";
if (
$i>=$count/$anumber-0.51
{
break;
}
if (
$i>=20
{    
print 
"<font size=1>...</font>";
break;
}
}
 }
if (
$count $start $anumber) print "<font size=1>  СЛЕДУЮЩИЕ </font><A href=razdel.php?start=".($start $anumber)."&".SID." alt=Следующие><img src=images/24db.gif  valign=bottom border=0></A> \n";
if (
$count $start $anumber$count $start $anumber;
print 
'</td></table>';

   

Сообщения:  [1-7] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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