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

Форум MySQL

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

 

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

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

тема: Сортировка неед хэлп!
 
 автор: P750   (19.09.2009 в 00:14)   письмо автору
 
 

Доброго времени суток всем, подскажите пожалуйста как можно сделать сортировку выведенных данных из БД. Т.е. есть запрос который вытягивает таблицу и рисует ее на странице + сверху над таблицей есть строчка "Сортировать по: Фамилия Имя Отчество" Как сделать что бы при нажатии на Фамилия - таблица обновилась и данные были сортированы по Фамилии, при нажатии на Имя - обновится и данные былит сортированы по Имени и т.д. Я начинающий в этом деле, и уже голова кругом подскажите хотя бы в каком направлении двигаться.
пробовал сделать так:

в отдельном файле создавал функцию
<?
function Imya()
{
$sql = "SELECT * FROM Baza";
mysql_query($sql);
}
?>

и делал ссылку:
Сортировать по: <a href="<?Imya();?>">Имени</a>

но не работает ...

  Ответить  
 
 автор: Valick   (19.09.2009 в 01:26)   письмо автору
 
   для: P750   (19.09.2009 в 00:14)
 

вам нужно формировать ссылки со значениями сортировки
например
<a href='index.php?sort=fam'>Фамилия</a>

принимаете переменную sort и отталкиваясь от значения fam
выполняете запрос с сортировкой по фамилии

if($_GET[sort]=="fam"){
$query="SELECT * FOM Baza ORDER BY familiya";
....
}

и так далее

  Ответить  
 
 автор: P750   (19.09.2009 в 13:15)   письмо автору
 
   для: Valick   (19.09.2009 в 01:26)
 

Valick СПС, попробовал этот вариант но почему то он упорно отказывается работать у меня, страницу обновляет все как положено но сортировать не сортирует...

  Ответить  
 
 автор: Valick   (19.09.2009 в 13:21)   письмо автору
 
   для: P750   (19.09.2009 в 13:15)
 

попробовал этот вариант
код покажите

  Ответить  
 
 автор: P750   (19.09.2009 в 13:35)   письмо автору
 
   для: Valick   (19.09.2009 в 13:21)
 

... (начало страницы)
<table width="760" border=0>
<tr class=border><td><b>Фамилия</b></td><td><b>Имя</b></td><td><b>Отчество</b></td></tr>
Сортировать по: <a href="Stroika.php?sort=familiya">Фамилии</a>&nbsp;&nbsp;&nbsp;<a href="Stroika.php?sort=imya">Имени</a>&nbsp;&nbsp;&nbsp;<a href="Stroika.php?sort=otch">Отчеству</a>

<?php 
if($_GET[sort]=="familiya"){
$query="SELECT * FOM stroi ORDER BY familiya";


if(
$_GET[sort]=="imya"){
$query="SELECT * FOM stroi ORDER BY imya";


if(
$_GET[sort]=="otch"){
$query="SELECT * FOM stroi ORDER BY otch";


require_once(
"enter.php"); // (подключение к БД)
// Переменная хранит число сообщений выводимых на станице 
$num 50
// Извлекаем из URL текущую страницу 
$page $_GET['page']; 
// Определяем общее число сообщений в базе данных 
$result mysql_query("SELECT * FROM stroi") or die(mysql_error()); 
$posts mysql_num_rows($result); 
// Находим общее число страниц 
$total intval(($posts 1) / $num) + 1
// Определяем начало сообщений для текущей страницы 
$page intval($page); 
// Если значение $page меньше единицы или отрицательно 
// переходим на первую страницу 
// А если слишком большое, то переходим на последнюю 
if(empty($page) or $page 0$page 1
  if(
$page $total$page $total
// Вычисляем начиная к какого номера 
// следует выводить сообщения 
$start $page $num $num
// Выбираем $num сообщений начиная с номера $start 
$result mysql_query("SELECT * FROM stroi LIMIT $start$num") or die(mysql_error()); 
// В цикле переносим результаты запроса в массив $postrow 
while ($postrow[] = mysql_fetch_array($result)) 

for(
$i 0$i $num$i++) 

echo 
"<tr class=border>
         <td>"
.$postrow[$i]['familiya']."</td>
         <td>"
.$postrow[$i]['imya']."</td>
         <td>"
.$postrow[$i]['otch']."</td>
         </tr>"


echo 
"</table>"
?>
<br>
<?php 
// Проверяем нужны ли стрелки назад 
if ($page != 1$pervpage '<a href= Stroika.php?page=1><<</a> 
                               <a href= Stroika.php?page='
. ($page 1) .'><</a> '
// Проверяем нужны ли стрелки вперед 
if ($page != $total$nextpage ' <a href= Stroika.php?page='. ($page 1) .'>></a> 
                                   <a href= Stroika.php?page=' 
.$total'>>></a>'

// Находим две ближайшие станицы с обоих краев, если они есть 
if($page 0$page2left ' <a href= Stroika.php?page='. ($page 2) .'>'. ($page 2) .'</a> | '
if(
$page 0$page1left '<a href= Stroika.php?page='. ($page 1) .'>'. ($page 1) .'</a> | '
if(
$page <= $total$page2right ' | <a href= Stroika.php?page='. ($page 2) .'>'. ($page 2) .'</a>'
if(
$page <= $total$page1right ' | <a href= Stroika.php?page='. ($page 1) .'>'. ($page 1) .'</a>';
?>
... (конец страницы)


вот код в котором выводится таблица + формируются страницы назад вперед (взято с форума)

необходимо ли ставить после запроса $query="SELECT * FOM stroi ORDER BY familiya"; такую строку mysql_query($query); ? хотя даже если ее и ставлю ничего не меняется...

  Ответить  
 
 автор: Valick   (19.09.2009 в 13:51)   письмо автору
 
   для: P750   (19.09.2009 в 13:35)
 

а так?

<?php
// Сортировка по умолчанию
$sort "familiya";
if(
$_GET[sort]=="familiya"$sort "familiya"
if(
$_GET[sort]=="imya"$sort "imya";
if(
$_GET[sort]=="otch"$sort "otch"

require_once(
"enter.php"); // (подключение к БД)
// Переменная хранит число сообщений выводимых на станице 
$num 50
// Извлекаем из URL текущую страницу 
$page $_GET['page']; 
// Определяем общее число сообщений в базе данных 
$result mysql_query("SELECT * FROM stroi") or die(mysql_error()); 
$posts mysql_num_rows($result); 
// Находим общее число страниц 
$total intval(($posts 1) / $num) + 1
// Определяем начало сообщений для текущей страницы 
$page intval($page); 
// Если значение $page меньше единицы или отрицательно 
// переходим на первую страницу 
// А если слишком большое, то переходим на последнюю 
if(empty($page) or $page 0$page 1
  if(
$page $total$page $total
// Вычисляем начиная к какого номера 
// следует выводить сообщения 
$start $page $num $num
// Выбираем $num сообщений начиная с номера $start 
$result mysql_query("SELECT * FROM stroi ORDER BY $sort LIMIT $start$num") or die(mysql_error()); 
// В цикле переносим результаты запроса в массив $postrow 
while ($postrow[] = mysql_fetch_array($result)) 

for(
$i 0$i $num$i++) 

echo 
"<tr class=border>
         <td>"
.$postrow[$i]['familiya']."</td>
         <td>"
.$postrow[$i]['imya']."</td>
         <td>"
.$postrow[$i]['otch']."</td>
         </tr>"


echo 
"</table>"
?>
<br>
<?php 
// Проверяем нужны ли стрелки назад 
if ($page != 1$pervpage '<a href= Stroika.php?page=1><<</a> 
                               <a href= Stroika.php?page='
. ($page 1) .'><</a> '
// Проверяем нужны ли стрелки вперед 
if ($page != $total$nextpage ' <a href= Stroika.php?page='. ($page 1) .'>></a> 
                                   <a href= Stroika.php?page=' 
.$total'>>></a>'

// Находим две ближайшие станицы с обоих краев, если они есть 
if($page 0$page2left ' <a href= Stroika.php?page='. ($page 2) .'>'. ($page 2) .'</a> | '
if(
$page 0$page1left '<a href= Stroika.php?page='. ($page 1) .'>'. ($page 1) .'</a> | '
if(
$page <= $total$page2right ' | <a href= Stroika.php?page='. ($page 2) .'>'. ($page 2) .'</a>'
if(
$page <= $total$page1right ' | <a href= Stroika.php?page='. ($page 1) .'>'. ($page 1) .'</a>';
?> 

  Ответить  
 
 автор: P750   (19.09.2009 в 14:19)   письмо автору
 
   для: Valick   (19.09.2009 в 13:51)
 

Все отлично работает, правда при переходе на др страницу все сбивалось, решил проблему путем добавления ссылки (см выделенное):

// Проверяем нужны ли стрелки назад 
if ($page != 1) $pervpage = '<a href=Stroika.php?sort='.$_GET['sort'].'&page=1><<</a>
                             <a href=Stroika.php?sort='.$_GET['sort'].'&page='.($page - 1) .'><</a>';
// Проверяем нужны ли стрелки вперед 
if ($page != $tpage) $nextpage = '<a href=Stroika.php?sort='.$_GET['sort'].'&page='.($page + 1).'>></a>
                                  <a href=Stroika.php?sort='.$_GET['sort'].'&page='.$total.'>>>></a>';
// Находим две ближайшие станицы с обоих краев, если они есть 
if($page - 1 > 0) $page1left = '<a href=Stroika.php?sort='.$_GET['sort'].'&page='.($page - 1).'>'.($page - 1).'</a> | '; 
if($page - 2 > 0) $page2left = '<a href=Stroika.php?sort='.$_GET['sort'].'&page='.($page - 2).'>'.($page - 2).'</a> | '; 
if($page + 1 <= $total) $page1right = ' | <a href=Stroika.php?sort='.$_GET['sort'].'&page='.($page + 1).'>'.($page + 1).'</a>';
if($page + 2 <= $total) $page2right = ' | <a href=Stroika.php?sort='.$_GET['sort'].'&page='.($page + 2).'>'.($page + 2).'</a>'; 


Огромное СПАСИБО ЧЕЛОВЕКУ Valick

  Ответить  
 
 автор: Valick   (19.09.2009 в 15:26)   письмо автору
 
   для: P750   (19.09.2009 в 14:19)
 

лучше всётаки вместо $_GET['sort'] использовать переменную $sort которую однозначно определяем в начале скрипта, иначе "напихают" вам чёнть непотребного, да и код будет выглядеть посимпатичнее

  Ответить  
 
 автор: P750   (19.09.2009 в 15:36)   письмо автору
 
   для: Valick   (19.09.2009 в 15:26)
 

Хорошо исправлю ) спасибо за дополнение! Прям рад что нашёл этот форум!!!! И люди хорошие и информации полезной достаточно!!!

  Ответить  
Rambler's Top100
вверх

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