|
|
|
| Есть таблица:
Помогите вывести
все логины отсортированные по кол-ву постов (post)
по 10 штук на страницу... с удобной навигацией, как это делается?
Заранее блогадарю! | |
|
|
|
|
|
|
|
для: Елена Смирнова
(17.12.2007 в 15:18)
| | Часть запроса (без LIMIT):
SELECT `login` FROM `tbl` ORDER BY `post` DESC ...
| , где tbl - имя таблицы
О постраничной навигации уже говорили не один раз | |
|
|
|
|
|
|
|
для: Unkind
(17.12.2007 в 15:22)
| | Unkind , что значит без " (без LIMIT)" разве он тут нужен? | |
|
|
|
|
|
|
|
для: Елена Смирнова
(17.12.2007 в 15:33)
| | При постраничной навигации будет нужен. Почитайте по ссылкам представленным. | |
|
|
|
|
|
|
|
для: sim5
(17.12.2007 в 15:45)
| | Перебираю сейчас по поиску все примеры постраничной навигации...
И никак не могу понять ( буду дальше ща разбираться...
А вообще у меня задача немного иная... мне нужна постраничная навигация для поиска...
Тоесть есть БД
В hobbi находятся русские слова... (интересы пользователя)
Нужно сделать форму для поиска по интересам и выводить найденное
в виде login - (post) по 10 ссылок на страницу и сортировать это по кол-ву post | |
|
|
|
|
|
|
|
для: Елена Смирнова
(17.12.2007 в 16:01)
| | Вот нашла подобный пример но не пойму как его для себя переделать?
http://softtime.ru/forum/read.php?id_forum=1&id_theme=31636
Тока у меня SQLlite а MySQL | |
|
|
|
|
|
|
|
для: Елена Смирнова
(17.12.2007 в 16:01)
| | Вот об этом вам Unkind и написал. Если вам нужно будет выводить постранично, то, например, LIMIT 10, 10 в запросе, выведет 10 записей начиная с записи №10. Есть в приведенных ссылках о постраничной навигации и очень много, эта тема действительно многократно подымалась на форуме. | |
|
|
|
|
|
|
|
для: Елена Смирнова
(17.12.2007 в 16:01)
| | Предварительно нужно установить индекс FULLTEXT на поле "hobby" (удобнее всего в phpMyAdmin). Тогда в запрос добавится условие(я):
SELECT * FROM `tbl` WHERE MATCH(`hobby`) AGAINST('хобби') ORDER BY `post` DESC ...
|
Ссылки в постраничной навигации должны содержать помимо номера страницы еще данные запроса. | |
|
|
|
|
|
|
|
для: Unkind
(17.12.2007 в 16:09)
| | Unkind , я это сейчас проделаю, покажите пожалуйста кодом хотябы "без постраничной навигации" лучше канечно с ней, как мне
найти всех пользователей у которых в хобби написано софттайм. | |
|
|
|
|
|
|
|
для: Елена Смирнова
(17.12.2007 в 16:13)
| | Попробуйте это:
<?php
function maxpage($total, $onpage)
{
global $page;
if( $total )
{
$maxpage = (int) (($total % $onpage) ? ($total / $onpage) : ($total / $onpage - 1));
if($page > $maxpage) $page = $maxpage;
if($page < 0) $page = 0;
}
else
{
$maxpage = $page = 0;
}
return $maxpage;
}
function limit($page, $onpage)
{
return ($page * $onpage) . ', ' . $onpage;
}
function pages($page, $maxpage, $onpage, $links_qty = 2, $query = '', $path = '')
{
$links = array();
$path = empty( $path ) ? $_SERVER['PHP_SELF'] : $path;
if($page - $links_qty > 1)
{
$links[] = "<a href='" . $path . "?" . $query . "'>1</a>";
$links[] = "...";
for($i = $page - $links_qty; $i < $page; $i++)
{
$links[] = "<a href='" . $path . "?page=" . $i . "&" . $query . "'>" . ($i + 1) . "</a>";
}
}
else
{
for($i = 0; $i < $page; $i++)
{
$links[] = "<a href='" . $path . "?page=" . $i . "&" . $query . "'>" . ($i + 1) . "</a>";
}
}
if($page + $links_qty < $maxpage)
{
for($i = $page; $i <= $page + $links_qty; $i++)
{
if($page == $i) $links[] = $i + 1;
else $links[] = "<a href='" . $path . "?page=" . $i . "&" . $query . "'>" . ($i + 1) . "</a>";
}
if($maxpage - $i != 0) $links[] = "...";
$links[] = "<a href='" . $path . "?page=" . $maxpage . "&" . $query . "'>" . ($maxpage + 1) . "</a>";
}
else
{
for($i = $page; $i <= $maxpage; $i++)
{
if($page == $i) $links[] = $i + 1;
else $links[] = "<a href='" . $path . "?page=" . $i . "&" . $query . "'>" . ($i + 1) . "</a>";
}
}
if( count($links) == 1 )
{
return;
}
echo implode(' ', $links) . "<br />\r\n";
}
$onpage = 10;
$q = 'софттайм';
$logic = 'AND';
$page = isset( $_GET['page'] ) ? (int) $_GET['page'] : 0;
$q = isset( $_REQUEST['q'] ) ? (string) $_REQUEST['q'] : '';
$logic = isset( $_REQUEST['logic'] ) ? (string) $_REQUEST['logic'] : false;
if( !in_array($logic, array('AND', 'OR')) )
{
$logic = 'AND';
}
if( get_magic_quotes_gpc() )
{
$q = stripslashes( $q );
}
$escape_array = array(
"\x2a" => "", //*
"\x22" => "", //"
"\x2b" => "", //+
"\x2d" => "", //-
"\x7e" => "", //~
"\x28" => "", //(
"\x29" => "", //)
"\x3c" => "", //<
"\x3e" => "" //>
);
$q = preg_replace('/\s/', ' ', $q);
$q = preg_replace('/ {2,}/', ' ', $q);
$q = trim( $q );
$q = explode(' ', $q);
for($i = 0, $part_of_query = '', $sep = ''; $i < count( $q ); $i++, $sep = $logic)
{
$part_of_query .= $sep . " MATCH(`hobby`) AGAINST('" . mysql_escape_string(strtr($q[$i], $escape_array)) . "' IN BOOLEAN MODE) ";
}
if( !($sql = mysql_query("SELECT COUNT(*) FROM `tbl` WHERE " . $part_of_query . ";")) )
{
die( 'Failure: ' . mysql_error() . ', File: ' . __FILE__ . ', Line: ' . __LINE__ );
}
$total = mysql_result($sql, 0);
if( $total )
{
$maxpage = maxpage($total, $onpage);
$limit = limit($page, $onpage);
if( !($sql = mysql_query("SELECT * FROM `tbl` WHERE " . $part_of_query . " ORDER BY `post` DESC LIMIT " . $limit . ";")) )
{
die( 'Failure: ' . mysql_error() . ', File: ' . __FILE__ . ', Line: ' . __LINE__ );
}
// Выведение результатов
while( $match = mysql_fetch_assoc($sql) )
{
print_r( $match );
}
// Ссылки для постраничной навигации
pages($page, $maxpage, $onpage, 2, 'q=' . urlencode(implode(' ', $q)) . '&logic=' . $logic, $_SERVER['PHP_SELF']);
}
else
{
echo 'No matches';
}
?>
|
P.S. Правильно "hobby", а не "hobbi". Если считаете наоборот, то правьте код...
P.P.S. К сожалению, нет времени проверить работоспособность.
P.P.P.S. В самом начале, конечно, должно быть соединение с СУБД. И выбор БД. | |
|
|
|
|
|
|
|
для: Unkind
(17.12.2007 в 16:34)
| | Сделала FULLTEXT, добавила 2-ум юзерам в hobby слово "софттайм" - результат: No matches | |
|
|
|
|
|
|
|
для: Елена Смирнова
(17.12.2007 в 16:52)
| | Измените часть кода:
<?php
//...
$page = isset( $_GET['page'] ) ? (int) $_GET['page'] : 0;
$q = isset( $_REQUEST['q'] ) ? (string) $_REQUEST['q'] : '';
$logic = isset( $_REQUEST['logic'] ) ? (string) $_REQUEST['logic'] : false;
$onpage = 10;
$q = 'софттайм';
$logic = 'AND';
// ...
?>
|
| |
|
|
|
|
|
|
|
для: Unkind
(17.12.2007 в 17:05)
| | Unkind, огромное спасибо!
Работает, но выдает разобранный по полкам массив:
Array ( [datar] => 20071216
[from] =>
[tel] =>
[mail] =>
[hobbi] => софттайм
[info] =>
[regdata] =>
[post] => 0
[money] => 0
[pol] => 1
[xdatar] => 0
[xpol] => 0
[xtel] => 0
[xmail] => 0
[ip] => [rat] => 0
[time] => 200712161917
[online] => 0 )
|
Как сделать чтобы он показал только логин и кол-во постов (login,post)
Пробовала так:
<?
echo $match['login'];
?>
|
безуспешно. | |
|
|
|
|
|
|
|
для: Елена Смирнова
(17.12.2007 в 18:38)
| | Вы уверены? Должно быть всё нормально.
<?php
// ...
while( $match = mysql_fetch_assoc($sql) )
{
echo "Логин: " . htmlspecialchars($match['login']), " Кол-во постов: " . $match['post'] . "<br />\r\n";
}
// ...
?>
|
P.S. htmlspecialchars() не должен применяться перевод вводом данных в БД. Это на тот случай, если вместо <, >, & или " будут появляться <, >, &, ".
P.P.S. А поле "login" вообще есть в структуре таблицы? В дампе массива, что Вы показали его нет. | |
|
|
|
|
|
|
|
для: Unkind
(17.12.2007 в 18:51)
| | Unkind, большое Вам спасибо!
Вы мне очень помогли!
Все работает!
Это самая главная часть моей социальной сети )
Терь буду пытаться сделать поиск по другим критериям, по возрасту например. | |
|
|
|