Forum Webscript.Ru

Общие => Базы данных => Тема начата: Dimetrius от 17 Мая 2004, 09:39:57

Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Dimetrius от 17 Мая 2004, 09:39:57
Подскажите кто знает!

Мне нужно сделать постраничный вывод результатов из БД, по 10 строк на страницу. Внизу естессно предыдущаия страница/следующая страница (появляется только когда 10 строк будет) или даже лучше 1,2,3,4 страница, а в идеале и то и другое :)

Напишите пожалуйста полностью код, а то совсем не знаю как это делается... :(

Заранее благодарен...
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: commander от 17 Мая 2004, 09:55:49
Какая БД?
если PostgreSQL:
первые десять строк:
SELECT test_id FROM test LIMIT 10 OFFSET 0;
от 10 до 20 стр.:
SELECT test_id FROM test LIMIT 10 OFFSET 10;
от 20 до 30:
SELECT test_id FROM test LIMIT 10 OFFSET 20;
и т.д.
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: tserbis от 17 Мая 2004, 10:14:03
Dimetrius,
воспользуйся поиском. Обсуждалось многократно. Скорее всего можно найти не только объяснение, но и готовый код.
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Меняздесьдавнонет от 17 Мая 2004, 10:22:49
Dimetrius
кроме знаний бывает еще работа ума, сообразительность
ты не поверишь, но человек тем и оличается от животного, что он может решить  задачу, не зная  решения! А просто подумав над ней.
Ты не згнаешь, как делается что?
Как программы пишутся?
как ссылки делать?
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Dimetrius от 17 Мая 2004, 16:20:41
commander,
База MySQL, я недавно начал работать и изучать БД и, к сожалению еще не все знаю и понимаю, если не затруднит, напишите пожалуйста что и где мне надо прописать для реализации этой задачи. Я буду очень благодарен!

Спасибо!
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Dimetrius от 17 Мая 2004, 16:27:36
RomikChef
Я не знаю как реализовать ту задачу которую описал в теме. Я недавно начал работать с БД и еще не все знаю, а Ваш сарказм я не понимаю.

Если человек что-то не знает или у него не получается, естественно, что он обращается за советом к более опытным людям и мне кажется, что можно либо ответить, либо проигнорировать вопрос, а не демонстрировать свои знания насмехаясь над другим человеком.
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Dimetrius от 17 Мая 2004, 16:33:22
tserbis
Спасибо за совет, но вот только что-то не могу найти ;) + у меня задача достаточно простая, просто не знаю как ее реализовать, а на форуме описываются в основном сложные варианты.
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: ThE0ReTiC от 17 Мая 2004, 16:41:56
Dimetrius
на форуме описываются разные варианты.
милости просим в поиск.
если ты еще не все знаешь - читай документацию и используй поиск, а не беги по каждому поводу спрашивать...
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Dimetrius от 17 Мая 2004, 16:48:12
ThE0ReTiC
Спасибо за совет прочитать документацию. Проблема в том, что я не смог найти конкретное решение для задачи или не там искал ;)

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

Тем не менее, спасибо за участие и совет :)
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: ThE0ReTiC от 17 Мая 2004, 17:09:11
видимо способность с поиску на генетическом уровне передается.
либо есть, либо нет и быть не может
http://www.phpclub.ru/?m=faq&s=96
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: commander от 17 Мая 2004, 17:09:36
Dimetrius
Посторайся задуматься над проблеммой, написть алгоритм по которому нужно действовать и решение придет, может не самое оптимальное, но всё же решение... :)

На каком языке программирования ты собираешся реализовывать вывод данных из БД?
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Меняздесьдавнонет от 17 Мая 2004, 17:17:25
Цитировать
не демонстрировать свои знания

покажи мне, пожалуйста, цитатой, где я говорил про свои знания?
Цитировать
обращается за советом к более опытным людям

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

советую тебе изменить свое потебительское отношение к форуму.
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Dimetrius от 17 Мая 2004, 17:17:38
commander
Я задумывался об этом все выходные ;) ну никак не идет... опыта не было в этой задачи и даже не знаю с какой стороны подобраться... :(

Все это дело работает на php.

Я понимаю, что задача возможно простая и вопросы мои дурацкие :) но.... рашение найти все же не могу.
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: commander от 17 Мая 2004, 17:19:19
Хоть это и не в моих правилах... давать готовые решения, но уж ладно:
PERL:

#!/usr/bin/perl -w
use strict;
use CGI qw(:standard);
use lib \'.\';
use SQLayer;
use HTML::Template;
my $D = SQLayer -> new(database =>\'DBI:Pg:dbname=comma;host=localhost;port=5432\',user=>\'user\', password=>\'secret\');
my $limit=10; #кол-во выводимых сток.
my $order_from=param(\'order_from\'); # переменная с которой начинаеться выборка.
my @all_rows=$D->column("SELECT ..."); #выбираем общее кол-во строк.
my $PData=$D->row_hash("SELECT .... LIMIT $limit OFFSET $order_from"); #выбираемограниченное кол-во строк.

        my $num_col=scalar(@all_rows);
        my $navigate;
        my $var_num=0;
        my ($order_from_next, $order_from_last, $check_last, $check_next, $limit_nl);
        my $i=0;
        while ($num_col >= $var_num)
        {
        $navigate->[$i]{\'order_from\'}=$var_num;
        $navigate->[$i]{\'limit\'}=$limit;
        $navigate->[$i]{\'number\'}=$i+1;
        if ($var_num==$order_from)
        {$navigate->[$i]{\'select\'}=1;}
        else {$navigate->[$i]{\'select\'}=0;}
        $var_num+=$limit;
        $i++
        }
        my $NA=0;
        while ($navigate->[$NA])
        {
             if ($navigate->[$NA]{\'order_from\'}==$order_from)
             {
                  unless ($NA==0)
                  {
                  $order_from_last=$navigate->[$NA-1]{\'order_from\'};
                  $check_last=1;
                  }
                  else
                  {
                  $check_last=0;
                  }
                  unless ($NA==$i-1)
                  {
                  $order_from_next=$navigate->[$NA+1]{\'order_from\'};
                  $check_next=1;
                  }
                  else
                  {
                  $check_next=0;
                  }
             $limit_nl=$navigate->[$NA]{\'limit\'};
             }
             $NA++
        }
    my $check_select=0;
    my $T = HTML::Template -> new(filename => "test.tmpl");
    print "Content-type: text/html\\n\\n";
    $T -> param(abc=>$PData, navigate=>$navigate, order_from_next=>$order_from_next, order_from_last=>$order_from_last, limit_nl=>$limit_nl, check_last=>$check_last, check_next=>$check_next, check_select=>$check_select);
    print $T -> output();
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: commander от 17 Мая 2004, 17:24:08
посмотри алгоритм и реализуй его на PHP c MYSQL я реализовал на PERL + PostgreSQL...
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: ThE0ReTiC от 17 Мая 2004, 17:24:45
commander
Цитировать
Dimetrius:
дело работает на php

это - ну сам понял. :)
Dimetrius
по приведенной мною ссылке...
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Меняздесьдавнонет от 17 Мая 2004, 17:24:50
Цитировать
Напишите пожалуйста полностью код

Цитировать
... и я всего лишь прошу подсказать как это сделать.

уже лучше.
подсказываем.

задача состоит из двух частей
1. вывести произвольныйдиапазон записей из базы.
в mysql за это отвечает оператор  limit
2.  вывести список ссылок.
ну, тут обычная арифметика. прибавить к текущей записи кол-во записей на странице - и вот тебе ссылка на след. страницу.
что здесь сложного и какие особенные знания нужны? про лимит - да, надо знать. а про ссылки - только цикл и условные переходы. про них ты знаешь?
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: ThE0ReTiC от 17 Мая 2004, 17:26:11
RomikChef
Ром - закрой тему.
в ФАКе на ПХПКлубе все расписано Бородиным.
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Dimetrius от 17 Мая 2004, 17:29:55
RomikChef
Ок. Приношу свои извинения. Я немного погорячился.... но просто здесь я хотел найти ответ на вопрос, а не сарказм в свой адрес.... ну да ладно.... суть в том, что я не знаю как реализовать эту задачу в принципе... не знаю как и с чего начать, что и где писать.... не было опыта.... я знаю как делать выборку, ставить определенные условия и т.д., а с поисковыми задачами еще не сталкивался... и задал я этот вопрос не из-за своего как вы выразились "потребительского отношения к форуму", а просто потому, что не к кому обратиться за помощью. Я вообще очень мало общаюсь в форумах.

В силу моих ограниченных знаний по этому вопросу, если мне подсказать какой-то участок кода, возможно я пойму что и как, возможно нет. Если же написать пусть не готовый вариант, но предельно конкретный, дальше я уже сам буду ковыряться и постараюсь понять что из чего берется и куда все это выводится.
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: commander от 17 Мая 2004, 17:32:31
ThE0ReTiC
Цитировать
дело работает на php

Забыл обновить страницу перед тем как код вставить... :)
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Dimetrius от 17 Мая 2004, 17:34:11
RomikChef
Так... приблизительно понятно.... ща попробую... про цикл и условные преходы знаю :)

Спасибо :)
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Dimetrius от 17 Мая 2004, 17:35:51
commander
Спасибо большое... :):) сейчас буду ковыряться.... в общем более-менее понятно...

Очень признателен за помощь :)
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Dimetrius от 17 Мая 2004, 17:37:11
ThE0ReTiC
Спасибо за ссылку... там действительно то что нужно... Сейчас попробую все это изучить ;)

Признателен вам за участие :)
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Меняздесьдавнонет от 17 Мая 2004, 18:17:43
ThE0ReTiC
у бородина код ужастный
огромный, неудобный и весь - про поиск, а про постраничку - чуть-чуть.
к тому же, я не считаю, что готовый код является идеальным ответом на вопрос.
человек напишет свой код, покажет, ему помогут исправить.
вот для чего форум!
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Dimetrius от 18 Мая 2004, 00:13:13
RomikChef
мда... вы правы.... код неудобный... но тем не менее попробую все-таки разобраться и выбрать то, что относится к делу :)
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Dimetrius от 18 Мая 2004, 01:42:02
RomikChef
Следуя вашему совету. Вот что получилось:

if ( empty($page) ) { $page = 1; }

$lines_per_page = (empty($lines_per_page)) ? "1" : $lines_per_page;
$from = ($page - 1) * $lines_per_page;
$to = $lines_per_page;
$next=($page+1);

$sql2=mysql_query("SELECT * FROM catalog where category=$catid limit $from, $to");

..........

echo "next";


вот... все вроде работает :), но как сделать так, чтобы не просто "вперед-назад", а с ссылками ввида: 1 | 2 | 3 | и т.д.?

P.S. Кстати, если подскажете как оптимизировать этот код (если конечно нужно) буду признателен
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Dimetrius от 18 Мая 2004, 01:46:11
commander
вроде все работает, но осталась одна проблема, которую я уже задал в топике (может быть вы тоже подскажете): как сделать так, чтобы переход по страницам был не просто "вперед-назад", а с ссылками ввида: 1 | 2 | 3 | и т.д.?
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Меняздесьдавнонет от 18 Мая 2004, 09:16:53
ну это как дважды два.
кстати, о дважды два.
сарказма в моих словах не было ни капли.
вот свом замечанием про сарказм - это да, ты подставился под не очень хорошее отношение.
а я тебе писал безо всякого сарказма, очень простую вещь.
что кроме ЗНАНИЯ (на которое ты так упираешь, и не имея которого, сразу задираешь лапки кверху), есьб ещеПОзнание.
к примеру, кроме знания, что дважды два равно 4, то же самое можно ВЫЧИСЛИТЬ.
то есть, моя мысль была в том,  что отсутствие знаний - НЕ ПОВОД отказываться от решения задачи!
было бы желание.

подсказывать, КАК сделать - не буду.
есть готовый код, ты можешь посмотреть.
я лишь удивлюсь
посчитать количество страиц  вывести нужное количество ссылок может и пятиклассник.
передать по ссылке нужное число, умножив номер страницы на кол-во записей - тем более.
циклы тебе знакомы.
ЧТО здесь можт составить проблему - кроме нежелания думать головой и неверия в собственные силы -  не знаю.
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Меняздесьдавнонет от 18 Мая 2004, 09:19:37
нарисуй пару ссылок руками и попробуй выявить закономерность.
я знаю, что тебе мешает.
ты не видишь того, что должно получиться.
так делать нельзя
пхп программист должен ЧЕТКО преставлять себе тот хтмл, который должен поулчить.
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Dimetrius от 18 Мая 2004, 10:52:01
RomikChef
Наверное ты прав.... но столкнувшись с проблемой, я не бегу сразу спрашивать ее решение, а все-таки пытаюсь решить ее самостоятельно. Сейчас я пока учусь на примерах. Если мне дать отправную точку или подсказать где это можно посмотреть (в каком мануале) дальше уже сам все пойму.
Название: Как разбить вывод результатов из БД на несколько страниц
Отправлено: Dimetrius от 18 Мая 2004, 16:25:06
RomikChef
Все получилось! :) вопрос снимается...
с помощью num_rows и ceil сделал.