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

Форум PHP

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

 

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

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

тема: Вывод данных с учётом размера...
 
 автор: Fernus   (02.01.2008 в 11:43)   письмо автору
 
 

Вот пишу форум и сталкнулся с одной проблемой.
Хочу сделать вывод данных из БД, как на http://wen.ru/forum, там при авторизации выбираешь размер страниц, так вот я даже не представляю как это осуществить...помогите.
Спасибо.

   
 
 автор: ddhvvn   (02.01.2008 в 12:37)   письмо автору
 
   для: Fernus   (02.01.2008 в 11:43)
 

А что тут представлять? Допустим, у каждого пользователя свое число. При выводе тем, это число проверяется и страницы содержат n тем.

Т.е. это число нужно использовать в запросе (LIMIT)

   
 
 автор: Fernus   (02.01.2008 в 12:45)   письмо автору
 
   для: ddhvvn   (02.01.2008 в 12:37)
 

>А что тут представлять? Допустим, у каждого пользователя свое число. При выводе тем, это число проверяется и страницы содержат n тем.
>
>Т.е. это число нужно использовать в запросе (LIMIT)

Если бы было всё так просто...там не по числу идёт вывод данных, т.е. по числу, но не на количество выводимых записей...

   
 
 автор: kasmanaft   (02.01.2008 в 12:58)   письмо автору
 
   для: Fernus   (02.01.2008 в 12:45)
 

> там не по числу идёт вывод данных, т.е. по числу, но не на количество выводимых записей...
То есть? о_0

> там при авторизации выбираешь размер страниц
В Кб чтоли?

   
 
 автор: Fernus   (02.01.2008 в 13:04)   письмо автору
 
   для: kasmanaft   (02.01.2008 в 12:58)
 

>> там не по числу идёт вывод данных, т.е. по числу, но не на количество выводимых записей...
>То есть? о_0
Ну, если не влом, то сходите гляньте....я не могу объяснить, так как не совсем понимаю работу той функции...там короче точно не по количеству сообщений выводится, т.к. там количество сообщений выводится по выбранному размеру, а не количеству...и выводимое количество сообщений зависит от их объёма, если я верно мыслю...

   
 
 автор: kasmanaft   (02.01.2008 в 13:13)   письмо автору
 
   для: Fernus   (02.01.2008 в 13:04)
 

Ну да, это размер в байтах, похоже. (причем он получается не ровно 2000б, например, а приблизительно... может быть чуть больше будет).
Этот размер складывается из веса пустой страницы (сама разметка, код) - он приблизительно одинаковый все время должен быть; и самих сообщений. "Размер" сообщения - это его длина, которую можно узнать с помощью strlen().

   
 
 автор: Fernus   (02.01.2008 в 13:17)   письмо автору
 
   для: kasmanaft   (02.01.2008 в 13:13)
 

Ну а как тогда вывести количество сообщений по размеру ???

   
 
 автор: Trianon   (02.01.2008 в 13:43)   письмо автору
 
   для: Fernus   (02.01.2008 в 13:17)
 


SELECT id, LENGTH(hdr), LENGTH(txt) ORDER BY id 

   
 
 автор: Fernus   (02.01.2008 в 13:46)   письмо автору
 
   для: Trianon   (02.01.2008 в 13:43)
 

>

>SELECT id, LENGTH(hdr), LENGTH(txt) ORDER BY id 
>


Что делает "LENGTH()" ???

   
 
 автор: Trianon   (02.01.2008 в 13:51)   письмо автору
 
   для: Fernus   (02.01.2008 в 13:46)
 

вопрос, видимо, к справочнику функций SQL?

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_length

   
 
 автор: Fernus   (02.01.2008 в 13:54)   письмо автору
 
   для: Trianon   (02.01.2008 в 13:51)
 

>вопрос, видимо, к справочнику функций SQL?
>
>http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_length

Можно ссылочку на справочник SQL где это есть...?=)

   
 
 автор: Fernus   (02.01.2008 в 13:55)   письмо автору
 
   для: Fernus   (02.01.2008 в 13:54)
 

Ой...ступил...извиняюсь...

   
 
 автор: Fernus   (02.01.2008 в 14:00)   письмо автору
 
   для: Fernus   (02.01.2008 в 13:55)
 

Ну это функция возращает длинну, измеренную в байтах, если я верно понял.
А как разбивать (выводить) сообщения с помощью этой функции?
Чёт не догоняю...

   
 
 автор: Fernus   (02.01.2008 в 14:36)   письмо автору
 
   для: Fernus   (02.01.2008 в 14:00)
 

<цитата>
Unkind
Запрашивается определенное кол-во записей и перед выводом каждый раз происходит проверка примерного размера страницы. Если размер следующего сообщения превысит допустимый, то происходит остановка.
</цитата>

Как это на PHP реализовать ???

   
 
 автор: Unkind   (02.01.2008 в 20:29)   письмо автору
 
   для: Fernus   (02.01.2008 в 14:36)
 

Первый способ. Позволяет считать еще и разметку. Хотя, это можно при желании и ко второму приделать.

<?php
define
'LIMIT'1000 );

$s = isset( $_GET['s'] ) ? (int) $_GET['s'] : 0;

$query "SELECT * FROM `tbl` WHERE ... ORDER BY ... ASC LIMIT " $s ", 50;";

if( !(
$sql mysql_query($query)) )
{
    die(
    
'Failure: ' mysql_error() . ' ' .
    
'File: ' __FILE__ ' ' .
    
'Line: ' __LINE__
    
);
}

$num_rows mysql_num_rows$sql );

$buffer '';

for( 
$buffer ''$row mysql_fetch_assoc($sql); $s++ )
{
    
$tmp htmlspecialchars($row['field']) . "<br />\r\n";
    
    if( 
strlen($tmp) + strlen($buffer) > LIMIT )
    {
        break;
    }

    
$buffer .= $tmp;
}

// Освобождение памяти от результата запроса
mysql_free_result$sql );

echo 
$buffer;

if( 
$num_rows $s )
{
    echo 
"<a href='" $_SERVER['PHP_SELF'] . "?s=" $s "'>Далее</a><br />\r\n";
}

// ...
?>


Второй. По-моему, этот лучше.

<?php
// ...

define'LIMIT'500 );

$s = isset( $_GET['s'] ) ? (int) $_GET['s'] : 0;

$query "SELECT LENGTH(`field`) AS `field_length` FROM `table` WHERE ... ORDER BY ... ASC LIMIT " $s ", 100;";

if( !(
$sql mysql_query($query)) )
{
    die(
    
'Failure: ' mysql_error() . ' ' .
    
'File: ' __FILE__ ' ' .
    
'Line: ' __LINE__
    
);
}

for( 
$size 0$row_count 0$row mysql_fetch_assoc($sql); $size += $row['field_length'], $row_count++ )
{
    if( 
$row['field_length'] + $size LIMIT )
    {
        break;
    }
}

$query "SELECT * FROM `table` WHERE ... ORDER BY ... ASC LIMIT " $s ", " $row_count ";";

if( !(
$sql mysql_query($query)) )
{
    die(
    
'Failure: ' mysql_error() . ' ' .
    
'File: ' __FILE__ ' ' .
    
'Line: ' __LINE__
    
);
}

while( 
$row mysql_fetch_assoc($sql) )
{
    echo 
htmlspecialchars($row['field']) . "<br />\r\n";
}

if( 
$row_count )
{
    echo 
"<a href='" $_SERVER['PHP_SELF'] . "?s=" . ($s $row_count) . "'>Далее</a><br />\r\n";
}

// ...
?>

   
 
 автор: Fernus   (02.01.2008 в 20:45)   письмо автору
 
   для: Unkind   (02.01.2008 в 20:29)
 

Unkind, Спасибо! Ща разбираться буду...=)

   
Rambler's Top100
вверх

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