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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Алгоритм прокуртки страниц
 
 автор: diman   (29.06.2006 в 16:05)   письмо автору
 
 

Здравствуйте. Я писал раньше на PHP, а сейчас по работе пришлось заняться Perl. Но не в этом суть. У меня такая проблемка. Создаю систему сообщений, вроде yandex. Из какой-то БД беру данные и выкидываю их в список. Но мне надо сделать так, если данных (сообщений) будет свыше допустим 10, то надо перейти на следующую страницу. Как это сделать. Подскажите пожалуйста сам алгоритм действий.
Проблемка заключается в том, что данные берутся из запроса и затем в цикле wile() обрабатываются и сразу выводятся в таблицу. Но цикл обрабатывает весь запрос, а мне надо чтобы сначала 10, затем если нажата кнопочка или ссылка перейти на следующие 10 и т. д. Пытался сделать в цикле wile() еще один цикл типа for() но база сразу переполнилась, произошел какой то цикл не заканчивающийся. Как быть, подскажите или пошлите где почитать как это сделать?

   
 
 автор: cheops   (29.06.2006 в 16:19)   письмо автору
 
   для: diman   (29.06.2006 в 16:05)
 

Это называется постраничной навигацией, вы сможете найти пример её реализации по ссылкам http://www.softtime.ru/scripts/pager.php
http://www.softtime.ru/info/articlephp.php?id_article=33
http://softtime.ru/forum/srchform.php?id_forum=1&name=%EF%EE%F1%F2%F0%E0%ED%E8%F7+%ED%E0%E2%E8%E3%E0&numberthemes=30&srchwhere=2&id_forum=1&logic=0&send=%CD%E0%E9%F2%E8
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=3555
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3044

   
 
 автор: diman   (30.06.2006 в 09:08)   письмо автору
 
   для: cheops   (29.06.2006 в 16:19)
 

Огромное спасибо. Это именно то что мне надо. Но подскажите пожалуйста что за функция intval() в PHP, а то я уже стал забывать PHP. Если только мои догадки - это наверное округление числа?

   
 
 автор: kasmanaft   (30.06.2006 в 09:10)   письмо автору
 
   для: diman   (30.06.2006 в 09:08)
 

нет, она возвращает значение переменной, приведенное к типу integer ...
ну, практически округляет :) ... (при больших значениях конечно нет... )
http://ru.php.net/manual/ru/function.intval.php

   
 
 автор: Diman   (30.06.2006 в 11:12)   письмо автору
 
   для: kasmanaft   (30.06.2006 в 09:10)
 

Не подскажите ли что за значение (или как выразиться лучше) в селекте присутсвует такая вещь как Limit? Что это такое и с чем его едят? Так как у меня на него SQL ругается, не знает что это такое.

   
 
 автор: CrazyAngel   (30.06.2006 в 11:14)   письмо автору
 
   для: Diman   (30.06.2006 в 11:12)
 

Это указывает сколько максимум записей нужно выбрать - лимит

   
 
 автор: kasmanaft   (30.06.2006 в 11:19)   письмо автору
 
   для: Diman   (30.06.2006 в 11:12)
 

MySQL скорее всего все же знает что эт такое :))
LIMIT offset, rows

Ключевое слово LIMIT сообщает серверу MySQL о выводе количества запросов (параметр rows) начиная с позиции offset - цитата из книги "Самоучитель PHP 5" :))
иначе говоря выбрать от сюда, до сюда :))
в итоге rows - offset = количество выбранных рядов

   
 
 автор: Diman   (30.06.2006 в 11:24)   письмо автору
 
   для: kasmanaft   (30.06.2006 в 11:19)
 

С этим ясно, но SQL всё равно ругается. Может где не там пишу, помогите пожалуйста.
Или наверное есть какая-то замена в SQL этому слову. TOP не пойдет, т. к. он выбирает только одно значение, а мне надо сделать выбор.
"Select id_theme, name, time_, uid_to, uid_from
From themes LIMIT $start, $num
Where uid_from=$uid"

   
 
 автор: Trianon   (30.06.2006 в 11:41)   письмо автору
 
   для: Diman   (30.06.2006 в 11:24)
 

А что за сервер? Явно ведь не MySQL?

   
 
 автор: kasmanaft   (30.06.2006 в 11:44)   письмо автору
 
   для: Diman   (30.06.2006 в 11:24)
 

надо писать LIMIT в конце, после WHЕRE ...

   
 
 автор: Diman   (30.06.2006 в 12:00)   письмо автору
 
   для: kasmanaft   (30.06.2006 в 11:44)
 

Это SQL. А там это не работает

   
 
 автор: kasmanaft   (30.06.2006 в 12:03)   письмо автору
 
   для: Diman   (30.06.2006 в 12:00)
 

SQL разные бывают ... Mysql,Postgresql,MsSql и т.д. ... попробуй лимит вконце написать..
Select id_theme, name, time_, uid_to, uid_from 
From themes Where uid_from=$uid
LIMIT $start, $num

   
 
 автор: Trianon   (30.06.2006 в 12:15)   письмо автору
 
   для: kasmanaft   (30.06.2006 в 11:44)
 

Совершенно справедливо.

   
 
 автор: Diman   (30.06.2006 в 12:35)   письмо автору
 
   для: Trianon   (30.06.2006 в 12:15)
 

А вы думаете не пробовал? А SQL не знаю точно какой. Могу сказать только что работаю с IB Expert под сервером FireBird. Может быть тогда ISQL получается.

   
 
 автор: Trianon   (30.06.2006 в 12:40)   письмо автору
 
   для: Diman   (30.06.2006 в 12:35)
 

Дело в том, что LIMIT есть далеко не во всех реализациях SQL, т.к. эта конструкция нарушает структурную целостность реляционной модели. Но поскольку на практике с ограничением выборки приходится сталкиваться везде, то пути обхода нужно искать именно для своего диалекта языка. Для oracle, например, это вложенный запрос с ограничением по rowid.

   
Rambler's Top100
вверх

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