Вывод информации из MySQL

Аватара пользователя
Moon Mag

Вывод информации из MySQL

Сообщение Moon Mag »

Всех приветствую.

Есть база MySQL, таблица и ячейка в которой находится большой текс. Подскажите пожалуйста как вывести от туда информацию допустим на 20 строк, а остальное сформировать на 2 страницу и так далее.

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

Как разбить большой кусок текста на несколько частей
Аватара пользователя
Coutty

Re: Вывод информации из MySQL

Сообщение Coutty »

SELECT * FROM `my_table` ORDER BY `id` LIMIT 0, 20;

SELECT * FROM `my_table` ORDRE BY `id` LIMIT 20, 20;

и т.д. В LIMIT'е сначала с какой строки, а потом - сколько строк.
Аватара пользователя
Moon Mag

Re: Вывод информации из MySQL

Сообщение Moon Mag »

К сожалению не работает.

Для эксперимента в нес в ячейку текст

1
2
3
4
5 и какой бы LIMIT не выставлял, текс выводится полностью
Аватара пользователя
Coutty

Re: Вывод информации из MySQL

Сообщение Coutty »

Ааа... Я не правильно прочитал задание.

Вроде бы MySQL не может делить текст на строки.

Как насчёт php-функции

array explode (string separator, string string [, int limit])

Разбиваем возвращаемое значение на строки и выводим строки перебором нужных значений массива.
Аватара пользователя
Moon Mag

Re: Вывод информации из MySQL

Сообщение Moon Mag »

Но за этот пример тоже спасибо, я заодно и в нем разобрался )

А эта функция по другому работает это когда в базе не сколько строк

table

id text

1 1-text

2 2-text

3 3-text

4 4-text

5 5text





$content = mysql_query ("SELECT * FROM content LIMIT 0, 2;", $db);

$contenT = mysql_fetch_array ($content);

do

{

echo "
".$content['text'];

}

while ($txT = mysql_fetch_array ($txt));



вот в таком случае выведется из базы 2 строчки

1-text

2-text
Аватара пользователя
Moon Mag

Re: Вывод информации из MySQL

Сообщение Moon Mag »

А вот explode() я чего то не догнал, он же получается. что каждое слово помещает в массив, тем самым мы можем ограничить максиму выводимых слов, а слова могут быть разной длины.

Просто в чем дело, есть сайт где ограничена длина и поэтому информация должна разбиваться на несколько страниц.
Аватара пользователя
Coutty

Re: Вывод информации из MySQL

Сообщение Coutty »

Почему обязательно слово?



PHP код:

Код: Выделить всё

$arr = explode("\n", $str); 






Так по переводу строки.





PHP код:

Код: Выделить всё

$arr = explode("", $str); 






А так - по брейкам.



Можно разбить по предложениям ( explode(". ", $str); ), потом в цикле добавлять по одному предложению, пока суммарная длина текста не достигнет определённой длины. Или вообще в сам текст вставить разделители типа {{PAGE}} в нужных местах и потом по ним разбивать.
Аватара пользователя
Moon Mag

Re: Вывод информации из MySQL

Сообщение Moon Mag »

А можно задать максимальную длину строки, допустим width 300 и разбить это опять же на какое то количество строк?

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

explode("\n", $str); а какие еще ключи бывают(\n)?
Аватара пользователя
Coutty

Re: Вывод информации из MySQL

Сообщение Coutty »

Цитата Moon Mag:



А можно задать максимальную длину строки, допустим width 300 и разбить это опять же на какое то количество строк?
Вывод информации из MySQL




Можно, но строка скорее всего разорвётся посередине слова.

Выделить часть строки так: $str = substr($str, 0, 300); Соответственно где-нибудь в середине - $str = substr($str, 3600, 300);


Цитата Moon Mag:



а какие еще ключи бывают(\n)?
Вывод информации из MySQL




Да любые символы.

\n - знак новой строки

\t - знак табуляции

\r - перевод строки ( \r\n обычно объединяются)



Можно искать конец предложения регулярным выражением, например, но здесь я не смогу помочь Изображение Самый простой способ - по точке с пробелом.
Аватара пользователя
Moon Mag

Re: Вывод информации из MySQL

Сообщение Moon Mag »

Спасибо большое за помощь Coutty.

И так после долгих мучение я смог вывести из MySQL определенное колличество строк на основе кода от chirs



Код: Выделить всё

$text = 'Первый пример текста. Второй пример текста. Третий пример текста. Четвертый пример текста.';
$max_length = 30;
$page = (isset($_GET['page']) ? $_GET['page'] : 2);
// Разбиваем $text на массив $arr[], находя в тексте пробелы между словами
$text.= ' ';
while (!empty($text)):
  if (strlen($text)>$max_length) $n = $max_length; else $n = strlen($text);
  for ($i = $n-1; $i>0; $i--) if ($text[$i]==' ') break;
  $arr[] = trim(substr($text,0,$i+1)); $text = substr($text,$i+1);
endwhile;
$k = count($arr);
// Выводим на экран текущую страницу
echo 'Страница '.$page.' из '.$k.'<br><br>';
echo $arr[$page-1];
// Теперь рисуем простенький навигатор страниц
$nav = '<a href="?page='.($page>1 ? $page-1 : 1).'">Предыдущая</a> ';
$nav.= '<a href="?page='.($page<$k ? $page+1 : $k).'">Следующая</a>';
echo '<br><br>'.$nav;
// А это для отладки, чтобы было видно, что происходит
echo '<pre>'; print_r($arr);


считает одним текстом и может запись типа разорвать на две части потому что там есть пробел между img_src и точно также ссылками.



Поэтому я сделал так

Код: Выделить всё

<?php 

$text = 'Первый пример <img src="***.jpg"> текста.{{PAGE}} Второй пример текста.{{PAGE}} Третий пример текста.{{PAGE}} Четвертый пример текста.';





$all_page = substr_count($text,"{{PAGE}}"); /*Считаем сколько страниц*/

echo $all_page;  /*Для проверки, потом можно убрать*/



/*Делаем проверку переменной page от не санкционированного ввода*/

if (isset($_GET['page'])) {$page=$_GET['page'];}  

if (isset($_GET['page']) == false or $page != is_numeric($page) or $page < 1 or $page > $all_page) {$page='1';} 





$string = strpos($text, "{{PAGE}}", 0); /*Ищем в тексте первую метку {{PAGE}} и возвращаем её значение*/

do

{

$i=$string+8; /*Так как наша метка состоит из 8 символов и чтоб метка не занасилась в массив и не выводилась на экран, нам нужно её перекрыть*/

$arr[] = trim(substr($text,0,$string)); /*Добавляем выборку из текста в массив - страница*/

$text = substr($text,$i); /*Выбираем последующие страницы, выбираем от начального и до конца текста*/

}

while ($string = strpos($text, "{{PAGE}}", 0)); /*Ищем 2-3,4, и тд. метку {{PAGE}} */



/* Если убрать скобки то выдаст структуру массива

echo '<pre>'; print_r($arr);

*/   



/* Выводим на экран текущую страницу */

echo '<br>Страница '.$page.' из '.$all_page.'<br><br>';

echo $arr[$page-1];





// Теперь рисуем простенький навигатор страниц

$nav = '<a href="?page='.($page>1 ? $page-1 : 1).'">Предыдущая</a> ';

$nav.= '<a href="?page='.($page<$all_page ? $page+1 : $all_page).'">Следующая</a>';

echo '<br><br>'.$nav;



?>


я немного позаимствовал части кода из других примеров, авторам спасибо.

Теперь просто будет немного ручного труда, придется в ручную подбирать колличество строк передвигая метки {{PAGE}}.
Ответить

Вернуться в «Вебмастеру»