![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Blaga |
|
|||
![]() ЛамМер++ ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 15.11.2005 Где: г. Иркутск Репутация: 2 Всего: 4 |
Пишу новостной двиг. Вроде уже все сделал... НО не могу сделать так чтобы у меня считались и выводились страницы. Короче полный геморой...
Во всех книгах которые у меня есть я ответа не нашел. Сделал кое что, Но эта фигня так и не работает. Он выводит неправильное кол-во страниц... и ссылки не такие получаються... Система работает с мускулом... вот код, посмотрите мож кто хоть какую идею подкинет...
-------------------- |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
отталкиваться от id можно только в том единственном случае, когда у тебя никогда-никогда не удаляются объекты. А они у тебя(если я правильно понял, и это структура описывает блог) вполне могут удаляться. Потому вместо сравнения по id и определения max(id) рекомендую конструкцию LIMIT
|
|||
|
||||
| Blaga |
|
|||
![]() ЛамМер++ ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 15.11.2005 Где: г. Иркутск Репутация: 2 Всего: 4 |
Они точно не будут удаляться до тех пор пока сервер не накроеться. Выводить то он по три штуки выводит а вот сами страницы...
-------------------- |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
а зачем ты определяешь общее количество записей:
SELECT max(id)... если можно так: SELECT count(*)... А по страницам бегать вот так: SELECT <column1>,<column2>... FROM blog ORDER BY id LIMIT (<number of page> - 1)*<adverts per page>, <adverts per page> В прицнипе, можно обойтись без сортировки, но как-нить MySQL выдаст строки в совсем произвольном порядке, потому лучше перестраховаться. |
|||
|
||||
| Blaga |
|
|||
![]() ЛамМер++ ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 15.11.2005 Где: г. Иркутск Репутация: 2 Всего: 4 |
Посмотрел про LIMIT как я понял он может показывать только определенное кол-во строк с начала таблицы. Да и не понял я как это мне поможет с выводом страниц...
Добавлено @ 14:41 Я немного не понял чем принципиально отличаються max() и cout()? Ты не мог бы написать примерный вариант запроса? Поподробней этого, а то я чуток не понимаю что за <column1>,<column2> и ORDER BY id LIMIT (<number of page> - 1)*<adverts per page>, <adverts per page> Я ведь только начал Скуль изучать... Буду очень благодарен. ) -------------------- |
|||
|
||||
| Blaga |
|
|||
![]() ЛамМер++ ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 15.11.2005 Где: г. Иркутск Репутация: 2 Всего: 4 |
Так, как реализовать то что написано выше я понял, вроде. НО как же мне вывести список страниц с сылками я так и не догнал...(типа | 1 | 2 | 3 | 4 | .... | n |)
-------------------- |
|||
|
||||
| Blaga |
|
|||
![]() ЛамМер++ ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 15.11.2005 Где: г. Иркутск Репутация: 2 Всего: 4 |
Кстати, общее кол-во записей я определяю чтоб потом разбивать на страницы... Вот как это у меня сейчас функционирует:
1 вылавливаем количество строк в БД 2 делим количество строк на то количество которое должно отображаться в одной странице 3 провереям поделилось нацело или нет для этого: 3,1 переводим переменную с количеством страниц(то что получилось в результате деления) в строку 3,2 ищем в строке точку 3,3 Если точка не нашлась все остаеться как было 3,4 если нашлась то добавляем к той цифре что была перед точкой 1(типа округляем ) 4 циклом выводим номера страниц (не отображаеться как нужно) 5 присваиваем к номерам страниц ссылки (тоже не работает как нужно) Вот в принципе и все. Естесственно больше всего интересуют 4 и 5 пункты. Кто подскажет? -------------------- |
|||
|
||||
| skyboy |
|
||||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
Blaga, <column 1>,<column 2> etc - это я по незнанию структуры твоей таблицы так поля использую, которые тебе нужны... я ж их названия не знаю..
А LIMIT(я ж указал ссылку на мануал) может работать в двух ипостасях: LIMIT <число> выбирает указанное количество строк, начиная с первой; LIMIT <начиная с какой строки>,<сколько строк> выберет заданной количество строк, начиная с указанной строки ,а не с первой. Т.е. LIMIT 10,50 - 50 строк, начиная с десятой.
ORDER BY id - надо бы применить сортировку(хотя бы и по id), а то можно получить неожиданный порядок; LIMIT (<number of page> - 1)*<adverts per page>, <adverts per page> переведу "комментарии"-переменные на русский: LIMIT (<номер текущей страницы> - 1)*<количество записей, отображаемых на одной странице>, <количество записей, отображаемых на одной странице> Т.е., коль у тебя 20 записей отображается на странице, то запрос для записей на третьей странице, будет выглядеть так:
Т.е. "отбросив" первые 40 записей(первые две страницы) выберем 20 записей - это и будет третья страница. А ссылки можно реализовывать, как хочешь. Например, так(таблица my_table содержит только два поля: id(auto_increment) и some_text(varchar) с какой-нить информацией):
вроде, все. учебный пример должен работать Добавлено @ 15:34 какая разница - нацело делится или нет? что ж ты, последнюю страницу с 15 записями( вместо 20 на "полной странице") отображать не будешь?! Добавлено @ 15:35 потому вместо всех этих пунктов советую делать так: floor(общее_количество_записей / количество_записей_на_"полной"_странице) + 1 |
||||||
|
|||||||
| Piphon |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 30.3.2004 Где: Екатеринбург Репутация: 2 Всего: 2 |
Вот тебе еще один "кирпич", на этот раз функцией, а не цельным кодом .
В нем: $index = номер страницы; $count = общее число элементов; $delimiter = количество элементов на странице; $href_link = шаблон ссылки где (%) - подстановка номера страницы; $count_list= количество ссылок на другии листы помимо активного; В запросе используй
P.S. Исправил баг с >> Это сообщение отредактировал(а) Piphon - 21.10.2006, 15:52 --------------------
Non Progredi Est Regredi... |
||||
|
|||||
| Vaulter |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: 6 Всего: 22 |
приведу функцию - рабочую лошадку практически всех списков и отчетов
куча параметров. но зато позволяет мне в шаблоне просто писать типа:
+ валидатор форм вообще сказка, но речь не об этом, итак:
как видно. по теме это последняя функция. здесь просто округление, нет никаких заворотов со строками (это ошибочная логика) $totalpages = ceil($totalitems / $onpage); |
||||
|
|||||
| Blaga |
|
|||
![]() ЛамМер++ ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 15.11.2005 Где: г. Иркутск Репутация: 2 Всего: 4 |
Так, по коду от skyboy. Короче опять глючит...
Для наглядности сделал скрины вот они: А вот мой подпраленый код(глючит который)
Вот так... Сейчас буду смотреть то что дали мне Piphon и Vaulter. Спасибо всем кто помогает. ) Добавлено @ 17:35 Piphon, вроде не сложно, попробую. Vaulter, скажем так для меня это очень сложно... Там что то даже про шаблоны которые я не использую. Но все же посмотрю, мож чего и получиться. -------------------- |
|||
|
||||
| skyboy |
|
||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
мдя. писал на работе, без отладки - отсюда и ошибки.
значит, так. строки 18-19 меняются на
а строки 21-22
А ты бы сам глянул: там обе страницы ведь имеют номер "1". Со счетчиком ошибся. |
||||
|
|||||
| Blaga |
|
|||
![]() ЛамМер++ ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 15.11.2005 Где: г. Иркутск Репутация: 2 Всего: 4 |
Так, с примером от Piphon я так и не разобрался...
skyboy, изменял я, смотрел... Я в этих циклах уже запутался давно... Не по глазам мне это было... Спать хочу... ЕЩЕ ОДНА БЛАГОДАРНОСТЬ ВСЕМ КТО ПОМОГАЕТ!!! -------------------- |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
опять же строки 18-19:
мдя. ошибок же наделал |
|||
|
||||
| Blaga |
|
|||
![]() ЛамМер++ ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 15.11.2005 Где: г. Иркутск Репутация: 2 Всего: 4 |
Ура!!!
-------------------- |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |