| |
|
|
| | Вот пишу форум и сталкнулся с одной проблемой.
Хочу сделать вывод данных из БД, как на http://wen.ru/forum, там при авторизации выбираешь размер страниц, так вот я даже не представляю как это осуществить...помогите.
Спасибо. | |
| |
|
|
| |
|
|
| |
для: Fernus
(02.01.2008 в 11:43)
| | | А что тут представлять? Допустим, у каждого пользователя свое число. При выводе тем, это число проверяется и страницы содержат n тем.
Т.е. это число нужно использовать в запросе (LIMIT) | |
| |
|
|
| |
|
|
| |
для: ddhvvn
(02.01.2008 в 12:37)
| | | >А что тут представлять? Допустим, у каждого пользователя свое число. При выводе тем, это число проверяется и страницы содержат n тем.
>
>Т.е. это число нужно использовать в запросе (LIMIT)
Если бы было всё так просто...там не по числу идёт вывод данных, т.е. по числу, но не на количество выводимых записей... | |
| |
|
|
| |
|
|
| |
для: Fernus
(02.01.2008 в 12:45)
| | | > там не по числу идёт вывод данных, т.е. по числу, но не на количество выводимых записей...
То есть? о_0
> там при авторизации выбираешь размер страниц
В Кб чтоли? | |
| |
|
|
| |
|
|
| |
для: kasmanaft
(02.01.2008 в 12:58)
| | | >> там не по числу идёт вывод данных, т.е. по числу, но не на количество выводимых записей...
>То есть? о_0
Ну, если не влом, то сходите гляньте....я не могу объяснить, так как не совсем понимаю работу той функции...там короче точно не по количеству сообщений выводится, т.к. там количество сообщений выводится по выбранному размеру, а не количеству...и выводимое количество сообщений зависит от их объёма, если я верно мыслю... | |
| |
|
|
| |
|
|
| |
для: Fernus
(02.01.2008 в 13:04)
| | | Ну да, это размер в байтах, похоже. (причем он получается не ровно 2000б, например, а приблизительно... может быть чуть больше будет).
Этот размер складывается из веса пустой страницы (сама разметка, код) - он приблизительно одинаковый все время должен быть; и самих сообщений. "Размер" сообщения - это его длина, которую можно узнать с помощью strlen(). | |
| |
|
|
| |
|
|
| |
для: kasmanaft
(02.01.2008 в 13:13)
| | | Ну а как тогда вывести количество сообщений по размеру ??? | |
| |
|
|
| |
|
|
| |
для: Fernus
(02.01.2008 в 13:17)
| | |
SELECT id, LENGTH(hdr), LENGTH(txt) ORDER BY id
|
| |
| |
|
|
| |
|
|
| |
для: Trianon
(02.01.2008 в 13:43)
| | | >
>SELECT id, LENGTH(hdr), LENGTH(txt) ORDER BY id
>
|
Что делает "LENGTH()" ??? | |
| |
|
|
|
| |
|
|
| |
для: 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:54)
| | | Ой...ступил...извиняюсь... | |
| |
|
|
| |
|
|
| |
для: Fernus
(02.01.2008 в 13:55)
| | | Ну это функция возращает длинну, измеренную в байтах, если я верно понял.
А как разбивать (выводить) сообщения с помощью этой функции?
Чёт не догоняю... | |
| |
|
|
| |
|
|
| |
для: Fernus
(02.01.2008 в 14:00)
| | | <цитата>
Unkind
Запрашивается определенное кол-во записей и перед выводом каждый раз происходит проверка примерного размера страницы. Если размер следующего сообщения превысит допустимый, то происходит остановка.
</цитата>
Как это на PHP реализовать ??? | |
| |
|
|
| |
|
|
| |
для: 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";
}
// ...
?>
|
| |
| |
|
|
| |
|
|
| |
для: Unkind
(02.01.2008 в 20:29)
| | | Unkind, Спасибо! Ща разбираться буду...=) | |
| |
|
|