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

Форум MySQL

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

 

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

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

тема: Вывод последних n записей

Сообщения:  [1-10]    [11-20]   [21-30]  [31-37] 

 
 автор: Loki   (29.06.2005 в 17:52)   письмо автору
 
   для: Евгений Петров   (29.06.2005 в 17:26)
 

1. об этом я предупреждал с самого начала
2. Таблица не сортируются физически, кроме того, сортируете вы ее по индексному полю, что должно быть достаточно быстро (если я ничего не путаю), а в третьих сортируется не вся таблица, а только ваши N записей (см. пост выше).

   
 
 автор: Евгений Петров   (29.06.2005 в 17:26)   письмо автору
 
   для: Loki   (29.06.2005 в 16:43)
 

Да запрос действительно выведет то что мне надо, но есть 2 НО:
1) данные выводятся в обратном порядке (впринципе терпимо)
2) меня мучает вопрос об оптимальности. Ведь насколько я понял вся таблица сортируется, а потом извлекаются записи. И тут же ещё один вопрос: не нарушится ли последовательность расположения записей в таблице после сортировки?

   
 
 автор: P@Sol   (29.06.2005 в 16:44)   письмо автору
 
   для: P@Sol   (29.06.2005 в 16:31)
 

>может так?
<?
$result 
mysql_querry(select from book where
avtor like 
"%0%"); 
  
$num_result mysql_num_rows($result); // допусти 16

  
for ($i=0$i $num_result$i++) 
  { 
          
$row mysql_fetch_array($result); 
          
$name[$i] = $row["name"];  // заносим все записи в $name 
   


а выводить так
<?
 $k
=10//надо 10 записей
 
if ($num_result $k$k=10;
 else 
$k $num_result
//$k = 10
for ($i=count($name)-$k$i<count($name)-1;$i++)  //выводим с 16-10  по 15
echo $name[$i];

   
 
 автор: Loki   (29.06.2005 в 16:43)   письмо автору
 
   для: Евгений Петров   (29.06.2005 в 16:06)
 

Евгений, мой запрос, который я привел в самом верху, как раз и выведет то, что вам нужно:
sql сначала обрабатывает where, затем order, затем limit... Собственно, создайте тестовую базу, да попробуйте.

   
 
 автор: Евгений Петров   (29.06.2005 в 16:35)   письмо автору
 
   для: P@Sol   (29.06.2005 в 16:31)
 

Не, не то.

   
 
 автор: P@Sol   (29.06.2005 в 16:31)   письмо автору
 
   для: P@Sol   (29.06.2005 в 16:13)
 

может так?
<?
$result 
mysql_querry(select from book where
avtor like 
"%0%"); 
  
$num_result mysql_num_rows($result); // допусти 16
 
if ($num_result $k$k=20;
 else 
$k $num_result//$k=16

  
for ($i=0$i $k$i++) 
  { 
          
$row mysql_fetch_array($result); 
          
$name[$i] = $row["name"];  // заносим все записи в $name 
   


а выводить так
<?
for ($i=count($name)-$k$i<count($name);$i++)  //выводим с 0 по 15
echo $name[$i];

   
 
 автор: Евгений Петров   (29.06.2005 в 16:20)   письмо автору
 
   для: P@Sol   (29.06.2005 в 16:13)
 

А вэтом случае выведет все записи где есть 0

   
 
 автор: Евгений Петров   (29.06.2005 в 16:18)   письмо автору
 
   для: P@Sol   (29.06.2005 в 16:13)
 

Так точно считает что строк 5 и выводит последние 5 записей. Я не прав?

   
 
 автор: P@Sol   (29.06.2005 в 16:13)   письмо автору
 
   для: Евгений Петров   (29.06.2005 в 16:06)
 

$result = mysql_querry(select avtor from book where avtor like "%0%"); 
  $num_result = mysql_num_rows($result); 
 if ($num_result > $k) $k=10;
 else $k = $num_result;

  for ($i=0; $i < $k; $i++) 
  { 
          $row = mysql_fetch_array($result); 
          $name[$i] = $row["name"]; 
   } 

   
 
 автор: Евгений Петров   (29.06.2005 в 16:06)   письмо автору
 
   для: P@Sol   (29.06.2005 в 15:58)
 

Ну во превых здесь уже два запроса, а во вторых он то выведет 10 или 9 записей, но это будут 9 последних записей. Я постараю сь наглядно это отбразить. Например нужно выбрать последние 5 запсией в которых есть "0":

Что мне нужно?     
1111111111       
1111011111
1111111110       
1111110111
1111101111
1111111111       
1111111111       
1111110111
1111111111       
1111111011
1111111111
       
Что получится у тебя?
1111111111       
1111011111
1111111110       
1111110111
1111101111
1111111111       
1111111111       
1111110111
1111111111       
1111111011
1111111111       

Видишь разницу?

   

Сообщения:  [1-10]    [11-20]   [21-30]  [31-37] 

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

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