Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите сделать постраничный вывод данных из базы 
:(
    Опции темы
starin
Дата 24.3.2010, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.3.2010
Где: Москва

Репутация: нет
Всего: нет



Нужно вывести данные из таблицы, допустим по 30 записей на страницу.
при формировании страницы нужен элемент с номерами страниц для перехода к ним, типа:
" страница 1, 2, 3 . . . 85, 86 " как реализовать? Каждый раз по два запроса запускать не хотелось бы:

Код

    $result=mysql_query("select * from `tabl_1` where (`type`=1)",$link);
    $num_rows = mysql_num_rows($result);
    $result=mysql_query("select * from `tabl_1` where (`type`=1) limit ".($_GET['page']*30).", ".(($_GET['page']+1)*30)",$link);


Есть другие варианты решений?

PM MAIL WWW   Вверх
skyboy
Дата 24.3.2010, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



само по себе два запроса - это неплохо.
но
Цитата(starin @  24.3.2010,  18:31 Найти цитируемый пост)

$result=mysql_query("select * from `tabl_1` where (`type`=1)",$link);
$num_rows = mysql_num_rows($result);

- ужасно. 
чтоб подсчитать количество строк не надо выбирать все данные, выделять под них память, чтоб только определить количество записей.
есть аггрегиующая функция count.
c приведенным условием запрос должен быть такой:
Код

$result=mysql_query("select count(*) from `tabl_1` where (`type`=1)",$link);
if ($result && $row = mysql_fetch_row($result)) {
 $num_rows = $row[0];
} else {
 $num_rows = 0;
}


Добавлено через 6 минут и 28 секунд
можно вместо запроса с "count(*)" и запроса с limit использовать два же запроса: первый выбирает данные и использует limit и sql_calc_found_rows, а второй запрос - c использованием found_rows
Код

select found_rows()

в твоем случае - практически нет никакой разницы. но если у тебя запрос будет сложнее одного сравнения в where, то подобный подход может ускорить работу.
PM MAIL   Вверх
starin
Дата 25.3.2010, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.3.2010
Где: Москва

Репутация: нет
Всего: нет



Если большое кол-во строк, я думаю
Код
 count() 
 тоже будет значительно подтормаживать ... особенно, если запрос связывает 5 таблиц... 
а может есть возможность не получать кол-во строк второй раз, а хранить его - передавать через клиента? или так делать не стоит? наверняка есть есть отработанные методы... как это обычно делается?

Добавлено через 14 минут и 51 секунду
Цитата(skyboy @ 24.3.2010,  19:38)
а второй запрос - c использованием found_rows
Код

select found_rows()

в твоем случае - практически нет никакой разницы. но если у тебя запрос будет сложнее одного сравнения в where, то подобный подход может ускорить работу.


Спасибо, про found_rows() не знал.

Это сообщение отредактировал(а) starin - 25.3.2010, 00:27
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0641 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.