как привыводе на сайте сделать постаничное разбиение, наример первые 10 kb страница 1, вторые 10 kb страница 2 и т.д.?
или предложите что-либо другое. Цель одна - из 1 огромной страницы сделать много мелких
Спустя 14 минут, 17 секунд (18.05.2008 - 14:34) Ghost написал(а):
1-й вариант хранить постранично в базе - id книги, № страницы, текст
2-й вариант - вставить в текст теги типа <page> и разбивать по ним
1-й лучше
2-й вариант - вставить в текст теги типа <page> и разбивать по ним
1-й лучше
Спустя 4 часа, 15 минут, 4 секунды (18.05.2008 - 18:49) chem1 написал(а):
Цитата(Ghost @ 18.5.2008, 11:34) [snapback]38709[/snapback]
1-й вариант хранить постранично в базе - id книги, № страницы, текст
2-й вариант - вставить в текст теги типа <page> и разбивать по ним
1-й лучше
2-й вариант - вставить в текст теги типа <page> и разбивать по ним
1-й лучше
Это имеется ввиду выгрузить из SQL книгу, разрезать руками на 500 частей (в книге более 500 страниц) и каждую отдельную страницу загрузить обратно?
Вариант конечно хороший, но по времени не подходит, хочется в этом году закончить

Спустя 18 минут, 53 секунды (18.05.2008 - 19:08) Ghost написал(а):
можешь разрезать програмно.. кто мешает-то..
Спустя 2 минуты, 46 секунд (18.05.2008 - 19:11) chem1 написал(а):
Цитата(Ghost @ 18.5.2008, 16:08) [snapback]38727[/snapback]
можешь разрезать програмно.. кто мешает-то..
есть программа?
Спустя 3 минуты, 49 секунд (18.05.2008 - 19:14) Sylex написал(а):
Цитата(chem1 @ 18.5.2008, 23:11) [snapback]38728[/snapback]
Цитата(Ghost @ 18.5.2008, 16:08) [snapback]38727[/snapback]
можешь разрезать програмно.. кто мешает-то..
есть программа?
так напиши ее! Поставь задачу хоть для начала конкретно

Спустя 4 минуты, 1 секунда (18.05.2008 - 19:18) Sylex написал(а):
Цитата(Ghost @ 18.5.2008, 18:34) [snapback]38709[/snapback]
1-й вариант хранить постранично в базе - id книги, № страницы, текст
2-й вариант - вставить в текст теги типа <page> и разбивать по ним
1-й лучше
2-й вариант - вставить в текст теги типа <page> и разбивать по ним
1-й лучше
кстати, эта таблица будет кросс-таблицей?
Спустя 10 минут, 38 секунд (18.05.2008 - 19:29) sergeiss написал(а):
Цитата(chem1 @ 18.5.2008, 15:20) [snapback]38708[/snapback]
Есть несколько распознаных книг загнаных в SQL, 1 книга - одна строка в таблице (id и text)
как привыводе на сайте сделать постаничное разбиение, наример первые 10 kb страница 1, вторые 10 kb страница 2 и т.д.?
или предложите что-либо другое. Цель одна - из 1 огромной страницы сделать много мелких
как привыводе на сайте сделать постаничное разбиение, наример первые 10 kb страница 1, вторые 10 kb страница 2 и т.д.?
или предложите что-либо другое. Цель одна - из 1 огромной страницы сделать много мелких
Я не вижу глобальной проблемы с самим принципом, если честно говорить... Для начала считываешь информацию в переменную, затем определяешь ее длину, затем вырезаешь нужный кусок... Выводишь его на странице, создаешь ссылки для перехода вперед-назад...
Проблема только в том, что если в одном поле - целая книга, то ты будешь каждый раз грузить компьютер большой и ненужной задачей.
Это я про алгоритм говорил

Можно изначально разбить текст на отдельные записи нужно длины. Правда, если захочется потом не по 10, а по 15 КБ выводить, то придется покувыркаться немного, переделывая БД

Можно сделать компромиссный вариант: одна запись - одна глава из книги. А уже потом считываешь целую главу в переменную, вырезаешь из нее кусок и показываешь пользователю.
Или проблема в том, что не можешь это оформить на PHP?
Спустя 9 минут, 34 секунды (18.05.2008 - 19:39) Ghost написал(а):
sergeiss, не, ну если уж делать - то культурно, чтоб небыло пол-слова на одной странице, и пол-слова на другой.. а это, пардон требует интеллектуального алгоритма, и во-первых, помимо базы ты еще и проц нагрузишь, а во-вторых алгоритм становится хрупким, и нестабильным. попробуй прикинь реализацию перехода с 5-й страницы на 6-ю
Sylex, смотря что ты понимаешь под "кросс-таблицей"
Sylex, смотря что ты понимаешь под "кросс-таблицей"
Спустя 3 минуты, 3 секунды (18.05.2008 - 19:42) chem1 написал(а):
Цитата(Sylex @ 18.5.2008, 16:14) [snapback]38729[/snapback]
так напиши ее!
к сожалению моих знаий для этого будет явно не достаточно

Цитата(Sylex @ 18.5.2008, 16:14) [snapback]38729[/snapback]
Поставь задачу хоть для начала конкретно 

Есть 400 kb текста, его нужно выложить на сайт, с разбиением по страницам (например 100 страниц по 4kb)
Задача - сделать это максимально просто с минимальными временными затратами.
Моя мысль была какая - загоняем текст в стороку таблицы SQL (собственно это уже сделано)
Далее из php файла с помощью SQL запроса вытаскиваем первые 4kb, затем с помощью paginator-а следующие 4kb и т.д.
Это технически сделать возможно?
Спустя 3 минуты, 1 секунда (18.05.2008 - 19:45) Sylex написал(а):
Цитата(Ghost @ 18.5.2008, 23:39) [snapback]38732[/snapback]
Sylex, смотря что ты понимаешь под "кросс-таблицей"
честно говоря, я хочу понять что это такое точно... читал много, но толком не понял, является в данном примере это крос или нет.
Спустя 2 минуты, 1 секунда (18.05.2008 - 19:47) Ghost написал(а):
технически - возможно, http://phpclub.ru/mysql/doc/string-functions.html
вот только как-то это через ....
вот только как-то это через ....
Спустя 5 минут, 9 секунд (18.05.2008 - 19:52) Ghost написал(а):
Sylex, по моему - это вопрос исключительно определений.
Спустя 15 секунд (18.05.2008 - 19:52) Sylex написал(а):
Цитата(chem1 @ 18.5.2008, 23:42) [snapback]38733[/snapback]
Есть 400 kb текста, его нужно выложить на сайт, с разбиением по страницам (например 100 страниц по 4kb)
Задача - сделать это максимально просто с минимальными временными затратами.
Моя мысль была какая - загоняем текст в стороку таблицы SQL (собственно это уже сделано)
Далее из php файла с помощью SQL запроса вытаскиваем первые 4kb, затем с помощью paginator-а следующие 4kb и т.д.
Это технически сделать возможно?
Задача - сделать это максимально просто с минимальными временными затратами.
Моя мысль была какая - загоняем текст в стороку таблицы SQL (собственно это уже сделано)
Далее из php файла с помощью SQL запроса вытаскиваем первые 4kb, затем с помощью paginator-а следующие 4kb и т.д.
Это технически сделать возможно?
Ничего сложного. В цикле берешь первую часть (4 Кб) и вставляешь в БД с номером 1, берешь вторую часть (4 Кб) и вставляешь в БД с номером 2. SQL так хорошо не знаю, я сделал бы через PHP алгоритм..
Фактически нужен алгоритм разделения строки на участки, где учесть, что слово нельзя делить, или даже делить по предложению ближайшему.
А если через SQL, то вот прекрасная функция:
LOCATE(substr,str,pos) - Возвращает позицию первого вхождения подстроки substr в строку str, начиная с позиции pos. ОООччень очень примерно (с ошибками в синтаксисе, потому что я его не знаю, нужно копать)):
Код
SELECT Count(id) as COL FROM MyBooks;
FOR J IN 1..COL LOOP
FOR I IN 0..LENGTH(data)/4000-1 LOOP
SELECT SUBSTRING(data, LOCATE('. ', data, I*4000)+2, 3998) as d FROM MyBooks WHERE id=J;
INSERT INTO NewTable(id_book, num_page, text) VALUES (J, I, d);
END LOOP;
END LOOP;
FOR J IN 1..COL LOOP
FOR I IN 0..LENGTH(data)/4000-1 LOOP
SELECT SUBSTRING(data, LOCATE('. ', data, I*4000)+2, 3998) as d FROM MyBooks WHERE id=J;
INSERT INTO NewTable(id_book, num_page, text) VALUES (J, I, d);
END LOOP;
END LOOP;
т.е. ищем начиная с ( 4000 * номер страницы ) символов искать точку с пробелом, типа наверняка это - предложение. И начиная с предложения "выдираем" строку в 4000 символов.
Спустя 2 минуты, 50 секунд (18.05.2008 - 19:55) chem1 написал(а):
Цитата(Ghost @ 18.5.2008, 16:47) [snapback]38735[/snapback]
вот только как-то это через ....
согласен, но мои знания в программировании не позволят мне сделать все по человечески

если поможете, то я с удовольствием

Спустя 1 минута, 51 секунда (18.05.2008 - 19:57) sergeiss написал(а):
Цитата(Ghost @ 18.5.2008, 20:39) [snapback]38732[/snapback]
sergeiss, не, ну если уж делать - то культурно, чтоб небыло пол-слова на одной странице, и пол-слова на другой.. а это, пардон требует интеллектуального алгоритма, и во-первых, помимо базы ты еще и проц нагрузишь, а во-вторых алгоритм становится хрупким, и нестабильным. попробуй прикинь реализацию перехода с 5-й страницы на 6-ю
Смотря какой алгоритм ты имеешь ввиду

Можно, наверное, так сделать. Завести еще одну таблицу, в которой прописать, с какого по какой символы из записи для определенной книги считать определенную страницу (всего-то 4 небольших поля: идентификатор книги, номер первого символа, номер последнего символа или их количество, и номер страницы). Запускаем один раз программу с тем самым "интеллектуальным" алгоритмом, а потом просто тупо используем полученные данные.
И тогда переход с одной страницы на другую делается легко и просто


PS. А вся интеллектуальность алгоритма разбиения - найти пробел и резать по нему, а не в середине слова. И при таком подходе можно всегда легко и быстро перестроить данные, если потребуется другой объем для вывода на каждом шаге. Потому что сами данные будут целостные, изменится только (условно говоря) индексация.
Спустя 11 минут, 41 секунда (18.05.2008 - 20:08) Ghost написал(а):
Цитата
PS. А вся интеллектуальность алгоритма разбиения - найти пробел и резать по нему, а не в середине слова. И при таком подходе можно всегда легко и быстро перестроить данные, если потребуется другой объем для вывода на каждом шаге. Потому что сами данные будут целостные, изменится только (условно говоря) индексация.
цифры с 5-й по 6-ю не просто так возникли

смотри, берем 1-ю страницу (ну допустим по 1000 символов), отсекаем хвост - остаётся 997 символов.
при выводе 2-й страницы (это, кстати, заново запущенный скрипт) в котором передаём параметр $page=2 мы с какого символа всё это выводить будем.. с 1000-го или возвращаться обратно, считать где закончиласть 1-я..
а на 25-й?
не, ну можно конечно в урле не страницу, а номер символа передавать, но лично я с такого урла афигею

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

Спустя 7 минут, 42 секунды (18.05.2008 - 20:16) Sylex написал(а):
Цитата(Ghost @ 19.5.2008, 0:08) [snapback]38741[/snapback]
Sylex по точке кстати тоже не рекомендую ловить - возможны сокращения типа г. кг. руб. м. км. и т.д. 

я это понимаю, но по другому не вижу как... пусть где-то будут исключения

Спустя 3 минуты, 33 секунды (18.05.2008 - 20:20) Ghost написал(а):
как вариант - по точке, пробелам + регистр следующей буквы.. регуляркой соответствующей. тоже не 100% попадание однако, т.к след. может идти имя собственное.

Спустя 7 месяцев, 22 дня, 14 часов, 58 минут, 37 секунд (11.01.2009 - 12:18) novice написал(а):
В базе есть сообщения, в данном коде вывожу 30 сообщении на страницу а сообщении гораздо больше, как мне вывести 30 сообщении на одной странице, потом нажать цифру 2 и вывести продолжение с 31 страницы по 60 и.т.д.?
PHP |
<? |
Спустя 8 часов, 43 минуты, 10 секунд (11.01.2009 - 21:01) kirik написал(а):
novice, это делается с помощью установки смещения в запросе, тоесть LIMIT 0, 30 покажет 30 записей с нулевой. Чтобы перейти на следующую страницу нужно написать LIMIT 30, 30, тогда покажется 30 записей с 30-й записи. 3-я страница будет выглядеть так - LIMIT 60, 30 (с 60-й записи вывести 30 штук итд).
Остается подумать над алгоритмом пагинации =)
Остается подумать над алгоритмом пагинации =)
Спустя 4 минуты, 42 секунды (11.01.2009 - 21:06) sergeiss написал(а):
Цитата (kirik @ 11.01.2009 - 21:01) |
novice Остается подумать над алгоритмом пагинации =) |
И что самое прикольное, подобных свежих тем на форуме несколько штук сейчас имеется

Спустя 9 часов, 10 минут, 51 секунда (12.01.2009 - 06:17) novice написал(а):
Всё, спасибо, нашёл, попробовал, вроде как заработало.
_____________