Сортировка столбца

Chupa

Guest
Сортировка столбца

У меня есть таблица, которая формируется на основе данных БД. Мне хотелось бы сделать так, чтобы при нажатии на столбец происходила сортировка, а при последующем нажатии на этот столбец обратная сортировка. Подскажите, плиз, наиболее действенный способ реализовать это. У меня были не которые варианты, но мне кажется, что они уж больно не хороши.
 

SiMM

Новичок
Re: Сортировка столбца

Автор оригинала: Chupa
У меня были не которые варианты, но мне кажется, что они уж больно не хороши.
Мне кажется, что твой код трудно подвергнуть критике ;) А вообще, лучше кривое, но родное, чем утянутое при помощи Cut&Paste с форума без вникания в происходящее.
 

Chupa

Guest
Нет, действительно, мои код очень плохой. Работает через передачу по ссылке типа sort=date&type=asc. Хотелось бы что-нибудь более совершенное и универсальное.
 

IL78

Guest
Chupa, чем же это не универсально? Имя столбца любое, направление сортировки - одно из двух... И цель достигается, что главное.
 

SiMM

Новичок
Автор оригинала: Chupa
мои код очень плохой
От скромности ещё никто не умирал ;) Но если будешь упорствовать - видимо, ты будешь первым ;)
Работает через передачу по ссылке типа sort=date&type=asc. Хотелось бы что-нибудь более совершенное и универсальное.
Присоединяюсь - может кто-то сделал ноу-хау в этой области? ;)
 

IL78

Guest
Единственное усовершенствование, что приходит в голову навскидку - попробовать сократить число передаваемых параметров, например, что-то типа asc=date. А в скрипте проверять, какой из двух возможных вариантов isset.
Достоинство - ссылки короче и cоответственно HTML компактнее, недостаток - лишняя проверка.
Так что еще можно поспорить, какой вариант лучше...
 

Chupa

Guest
Заголовок столбца ID выглядит так:
PHP:
<a href="<? echo $PHP_SELF."?page=$page&sort=graphicid&type=";if($sort=="graphicid" && $type=="asc")echo "desc";else echo "asc";?>">ID:</a>
... а сам запрос для построения таблицы вот так:
PHP:
$query="SELECT * FROM graphic ORDER BY $sort $type LIMIT $nach,$limit ";
$result=mysql_query($query);
..нерациональность получается в том, что для каждого столбца надо делать такую громосткую ссылку...
 

Tn

Guest
Где-то в секции инициалицазии:
PHP:
if (isset($_REQUEST['order_users'])) $_SESSION['order_users'] = $_REQUEST['order_users'];
else if (!isset($_SESSION['order_users'])) $_SESSION['order_users'] = '';
Перед формированием таблицы списка:
PHP:
$next_order['u_surname_name'] = 'u_surname_name';
$next_order['u_status'] = 'u_status';
if ($_SESSION['order_users'] == 'u_surname_name') {
  $order_query = 'u_surname, u_name';
  $next_order['u_surname_name'] = 'u_surname_name_';
}
else if ($_SESSION['order_users'] == 'u_surname_name_') {
  $order_query = 'u_surname DESC, u_name DESC';
  $next_order['u_surname_name'] = 'u_surname_name';
}
else if ($_SESSION['order_users'] == 'u_status') {
  $order_query = 'u_status';
  $next_order['u_status'] = 'u_status_';
}
else if ($_SESSION['order_users'] == 'u_status_') {
  $order_query = 'u_status DESC';
  $next_order['u_status'] = 'u_status';
}
else {
  $order_query = 'u_status DESC'; // default order
  $_SESSION['order_users'] = 'u_status_';
  $next_order['u_status'] = 'u_status';
}

$query = "SELECT u_id, u_name, u_surname, u_status FROM users ORDER BY $order_query";
Далше в заголовке таблицы списка:
PHP:
<td><a href="<?=$_SERVER['SCRIPT_NAME']?>?order_users=<?=$next_order['u_surname_name']?><?=$search_query?>"><?=$lang['u_surname']?>, <?=$lang['u_name']?></a></td>
<td><a href="<?=$_SERVER['SCRIPT_NAME']?>?order_users=<?=$next_order['u_status']?><?=$search_query?>"><?=$lang['u_status']?></a></td>
Вот.. жду критики..
 

gray07

Новичок
..нерациональность получается в том, что для каждого столбца надо делать такую громосткую ссылку...
Можно использовать вместо sort=date&type=asc что-то типа sort=2&type=asc, а потом в sql 'order by 2 asc' - поймет, так и ссылки короче будут, и легче обрабытывается скриптом.

Еще, важно, нужно проверять, чтоб некоторые умники не подставили что-то типа
"sort=date union select login,password from users"
 
Сверху