Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Разбиение SQL результата на стр.

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

vitovt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Как результат запроса (например вывод новостей) разбить на странициы или например на тко (показать нвость с 1-40ж40-60 и т.д)?

Всего записей: 1087 | Зарегистр. 02-05-2002 | Отправлено: 12:59 05-03-2003
Saruman

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Делаешь запрос, считаешь число рядов в результате, делишь на число рядов на странице - получаешь количество страниц. Потом смотришь, не передан ли номер страницы (или смещение по номеру ряда, как угодно). Если передано - перемещаешь указатель, например, с помощью mysql_data_seek(..). И выводишь нужное число рядов на страницу.
Что непонятно-то?
Я для себя написал один раз это в виде класса с использованием шаблонов, и теперь использую его во всех проектах. Готовый класс был, по-моему, на http://phpclasses.org.

Всего записей: 188 | Зарегистр. 20-01-2003 | Отправлено: 13:20 05-03-2003
weelMod

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
 
/* Переменные для соединения с базой данных */
$hostname = "localhost";
$username = "xxxxx";
$password = "xxxxx";
$dbName = "xxxx";
 
/* Таблица MySQL, в которой хранятся данные */
$userstable = "xxxxx";
 
/* создать соединение */
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
/* выбрать базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die(mysql_error());  
 
 
/* кол-во на странице*/
$in_page = 50;
 
// получаем количество строк
$amount = @mysql_result(mysql_query("SELECT count(row_id) as xxxx_total  FROM $userstable"),0);
 
// рисуем навигационную строку и пишем начало таблицы
print("<div align=center>". draw_bar($page, $amount, $in_page, "modules.php?name=Price&page="). "</div>\n<table>");
 
// формируем запрос к базе
$res = mysql_query("SELECT * FROM $userstable". get_limit($page, $amount, $in_page));
 
// получаем номер для нумерованного списка
$count = get_count_limit($page, $amount, $in_page);
 
// выводим строки
while ($row = mysql_fetch_array($res)) {
  $count++;
  print ("<tr");
 
  // фон каждой второй строки - серым цветом
  if ($count/2==intval($count/2))
    print (" bgcolor=#e1e1e1");
  print ("><td align=right>$count.</td><td>${row[n2]}</td><td align=right>${row[n7]}</td></tr>\n");
  };
 
// конец таблицы и нижняя навигационная строка
print("</table><div align=center>". draw_bar($page, $amount, $in_page, "modules.php&name=Price?page="). "</div>\n");
 
 
 
function get_page($page, $total, $in_page) {
  if ($page<0)
    return 0;
  elseif ($total>0) {
    $max = $total/$in_page;
    if (intval($max)==$max)
      $max = intval($max)-1;
    else
      $max = intval($max);
    if ($page>$max)
      return $max;
    else
      return $page;
    }
  else
    return 0;
  }
 
function draw_bar ($page, $total, $in_page, $url) {
  $page = get_page($page, $total, $in_page);
 
  if ($total>0 && intval($total/$in_page)>0) {
    $start=$page-2; $end=$page+2;
    if ($start<0) {
      $start=0;
      $end=$start+4;
      };
    $end1 = intval(($total-1)/$in_page);
    if ($end>$end1 && $start>$end-$end1) {
      $end=$end1;
      $start=$end-4;
      }
    elseif ($end>$end1) {
      $end=$end1;
      $start=0;
      };
 
    if ($start>0)
      $nav_panel[] = "<a href=".$url."0>&lt;&lt; В начало</a>";
    if ($page>$start)
      $nav_panel[] = "<a href=$url". ($page-1). ">&lt;&lt; Назад</a>";
    for ($a=$start; $a<=$end; $a++) {
      if ($a==$page)
        $nav_panel[] = "<b>". ($a+1). "</b>";
      else
        $nav_panel[] = "<a href=$url$a>". ($a+1). "</a>";
      };
    if ($page<$end)
      $nav_panel[] = "<a href=$url". ($page+1) .">Вперед &gt;&gt;</a>";
 
    return implode(" | ", $nav_panel);
    };
  }
 
function get_limit ($page, $total, $in_page) {
  $page = get_page ($page, $total, $in_page);
  if ($total>0) {
    if (intval($total/$in_page)==0)
      return "";
    elseif ($page>0)
      return " LIMIT ". ($page*$in_page). ",$in_page";
    else
      return " LIMIT $in_page";
    }
  else
    return "";
  }
 
function get_count_limit ($page, $total, $in_page) {
  $page = get_page ($page, $total, $in_page);
  return $page*$in_page;
  }
 
 

Всего записей: 10 | Зарегистр. 24-12-2002 | Отправлено: 13:53 05-03-2003
Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Saruman
а зачем так мучатсья (я про mysql_seek)
 
ведь у select есть такая интересная вещь:
 
SELECT * FROM tablename LIMIT START_POINT,LENGTH
 
START_POINT - с какой строки выводить ответ.
LENGTH - количество строк
 
Это в качестве вывода на экран правильной страницы.
 
а  чтобы узнать количество строк, легче запустить:
SELECT count(*) as count FROM tablename
 
Вернёт одно значение равное всем строкам таблицы.
останесть только разделить на количество строк на странице.

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 19:08 05-03-2003
kentaur



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DB_Pager

Всего записей: 78 | Зарегистр. 05-02-2003 | Отправлено: 19:17 05-03-2003
wwwww



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну а если записей настолько много что запрос типа  
 
SELECT DISTINCT * FROM XXX WHERE XXX.ddd LIKE 'Невез%' OR XXX.eee LIKE 'Невез%' ORDER BY XXX.qqq";
не успевает пройтись по всем строкам за 30сек, а работает только если задать limit. Как в этом случае узнать число страниц?

Всего записей: 323 | Зарегистр. 26-12-2003 | Отправлено: 18:45 26-12-2006
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wwwww

Цитата:
Как в этом случае узнать число страниц?

число страниц каких? с результатом?

Цитата:
не успевает пройтись по всем строкам за 30сек, а работает только если задать limit

значит что то сделано не оптимально

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:50 26-12-2006
wwwww



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
число страниц каких? с результатом?

Да, с результатом

Цитата:
значит что то сделано не оптимально

возможно, во тока что?
Запрос:
 
SELECT DISTINCT * FROM XXX WHERE XXX.nazvanie_eng LIKE 'Невез%' OR XXX.nazvanie_rus LIKE 'Невез%' ORDER BY XXX.nazvanie_rus";  
 
База:
CREATE DATABASE `samodelk_film`
    CHARACTER SET 'cp1251'
    COLLATE 'cp1251_general_ci';
 
Таблица:
 
CREATE TABLE `xxx` (
  `id` int(8) NOT NULL auto_increment,
  `nazvanie_eng` text,
  `nazvanie_rus` text,
  `rejisseur` varchar(130) default NULL,
  `COUNTRYF` text,
  `FSTUDIO` varchar(80) default NULL,
  `CATEGORY` text,
  `LENGTH` int(11) default NULL,
  `ACTORS` text,
  `DESCRIPTION` text,
  `YEAR` int(11) default NULL,
  `pather` varchar(36) default NULL,
  `date` date default '0000-00-00',
  `cost` int(3) default '0',
  `date_upd` date default '0000-00-00',
  PRIMARY KEY  (`film_id`)
) ENGINE=MyISAM AUTO_INCREMENT=10985 DEFAULT CHARSET=cp1251;

Всего записей: 323 | Зарегистр. 26-12-2003 | Отправлено: 19:33 26-12-2006
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wwwww
Синтаксис оператора EXPLAIN
Оптимизация запросов в MySQL

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 11:34 27-12-2006
IFKey



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
_http://prop.to.kg/?what=articles&id=04
Интересная статья на данную тему, все доступно объяснено, только пока не понимаю вот эту штуку (красным):

Цитата:
$query = "SELECT * FROM programms ORDER BY pid DESC LIMIT $lpos,$lines_per_page";

Всего записей: 331 | Зарегистр. 20-03-2007 | Отправлено: 14:47 05-04-2007 | Исправлено: IFKey, 14:53 05-04-2007
TBFG



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
IFKey

Цитата:
только пока не понимаю вот эту штуку (красным):  

 
Там написано: отсортировать по полю pid в обратном порядке (от большего к меньшему).
 
Слух, изучи _http://sql.ru/docs/mysql/rus%5Fref/  
 
Там весь синтаксис.

----------
И Он молвил в великой тоске: "Следовало бы всех вас, сволочей, уничтожить до одного, но я устал. Я ужасно устал".

Всего записей: 584 | Зарегистр. 10-07-2004 | Отправлено: 15:18 05-04-2007
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Разбиение SQL результата на стр.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru