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

Форум PHP

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

 

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

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

тема: Обратная сортировка
 
 автор: медведь   (09.09.2008 в 02:58)   письмо автору
 
 

<table>
<tr><td>pole1</td><td>pole2</td><td>pole3</td><td>pole4</td></tr> 
<?php
// запрос к БД и вывод результатов

echo "<tr><td>".$res['pole1']."</td><td>".$res['pole2']."</td><td>".$res['pole3']."</td><td>".$res['pole4']."</td></tr>";
?>
</table>

необходимо по клику по заголовку столбца (pole1, pole2 и т.д.) сделать Reverse сортировку.
Я так понимаю, что нужно гетом передавать имя поля и значение DESC или ASC
примерно: <a href="index.php?pole=pole1&reverse=....."> Далее теряюсь.

  Ответить  
 
 автор: sim5   (09.09.2008 в 04:41)   письмо автору
 
   для: медведь   (09.09.2008 в 02:58)
 

А зачем передавать pole=pole1? Вы же сортируете не столбец, а строку? Значит сделать "логический триггер" и сортировать массив (если это данные массива), либо устанавливать в запросе к таблице сортировку DESC или ASC, в зависимости от состояния этого треггера.

  Ответить  
 
 автор: mehelson   (09.09.2008 в 06:32)   письмо автору
 
   для: медведь   (09.09.2008 в 02:58)
 

>либо устанавливать в запросе к таблице сортировку DESC или ASC, в зависимости от состояния этого треггера.
Что-то типа этого:

<?php
$i 
$_GET['i'];
if(
$i)
{
    
$q "SELECT * FROM test ORDER BY id DESC";
    
$t false;
}
else
{
    
$q "SELECT * FROM test";
    
$t true;
}

// запрос к БД и вывод результатов 

echo "<tr><td><a href=script.php?i=$t>".$res['pole1']."</a></td></tr>"//и т.д.
?>

  Ответить  
 
 автор: sim5   (09.09.2008 в 07:16)   письмо автору
 
   для: mehelson   (09.09.2008 в 06:32)
 

Вот этого я не знаю. Но автор указывает не столбец таблицы, а строку, значит надо полагать, что строка должна быть записана в обратном порядке, в противном случае с помощью ORDER BY id DESC не получиться, если нужно будет сортировать каждый столбец независмо друг от друга. Что же касается строки, то:
<?
$sort 
= isset($_GET["rev"]) ? ~$_GET["rev"] : 1;
if (
$sort == 1//....
echo "<a href=\"script.php?reverse=$sort\">Сортировка</a>";


PS. Нет, не прав, понял - нужно сортировать один и тоже набор по какому либо столбцу. Тогда так:
<?
$rev 
= isset($_GET["rev"]) ? ~$_GET["rev"] : 1;
$sort $rev == "ASC" "DESC"//для запроса
echo "<a href=\"script.php?p=".$pole1."&rev=".$rev."\"><td>pole1</td></a> 
  <a href=\"script.php?p="
.$pole2."&rev=".$rev."\"><td>pole2</td></a>
 ......"
;


PPS. Еще одно дополнение. Если каждая колонка таблицы должна помнить направление сортировки, то все предыдущее не пойдет. Тогда нужно делать по маске, например:
<?
session_start
();
//список полей таблицы в базе
$col = array("pole1","pole2","pole3","pole4");
//маска сортировки, для 4 полей равна 0F (1111)
if (!$_SESSION['mask']) $_SESSION['mask'] = 0;
//выбор поля или поле по умолчанию
$p = isset($_GET['p']) && $col[intval($_GET['p'])-1] ? intval($_GET['p'])-0
//реверс бита маски соответствующий полю таблицы
$_SESSION['mask'] ^= pow(2,$p);
//получаем сортировку по полю
$sort $_SESSION['mask'] & pow(2,$p) ? $col[$p]. " DESC" $col[$p]. " ASC";
$q "SELECT * FROM tbl ORDER BY " $sort;

echo 
"<a href=\"script.php?p=".$pole."\"><td>pole1</td></a>  
  <a href=\"script.php?p="
.$pole."\"><td>pole2</td></a> 
 ......"
;
//где $pole - номер поля, от 1 до 4

  Ответить  
 
 автор: медведь   (09.09.2008 в 12:55)   письмо автору
 
   для: sim5   (09.09.2008 в 07:16)
 

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

Исходя из предложенного, написал:


$rev = isset($_GET["rev"]) ? ~$_GET["rev"] : 1; 
$pole1="pole1";

if (isset($_GET['rev'])) { 
if ($_GET['rev'] == 1) $sort = SORT_DESC; else $sort = SORT_ASC; 
 array_multisort($pole1, $sort); 
}  

//и ссылка

<td align="center" height='20' style='border-right: 1px solid #F8F5F5;'><font size="2">
<a href="all.php?p=<? echo $pole1;?>&rev=<? echo $rev;?>" class="res">Заголовок pole1</a>
</td>

//в pole1 из БД в цикле выводится масив $result['pole1']? вот его нужно и отсортировать, точно так же pole2 и т.д.


Но все-равно не получается(

  Ответить  
 
 автор: sim5   (09.09.2008 в 13:00)   письмо автору
 
   для: медведь   (09.09.2008 в 12:55)
 

Ну вы даете. Если вы не хотите обращаться каждый раз к базе, то полученный массив из базы надо либо кешировать, либо сохранить где-то, это раз. Два - сортировать тогда надо сохраненный массив.

  Ответить  
 
 автор: медведь   (09.09.2008 в 13:03)   письмо автору
 
   для: sim5   (09.09.2008 в 13:00)
 

а так его можно записать?

$pole1[]=result['pole1'];


и как, кстати, лучше (быстрее)

  Ответить  
 
 автор: sim5   (09.09.2008 в 13:22)   письмо автору
 
   для: медведь   (09.09.2008 в 13:03)
 

Вы что из базы получаете значение только одного поля таблицы?

  Ответить  
 
 автор: медведь   (09.09.2008 в 13:34)   письмо автору
 
   для: sim5   (09.09.2008 в 13:22)
 

нет, 10

  Ответить  
 
 автор: sim5   (09.09.2008 в 13:44)   письмо автору
 
   для: медведь   (09.09.2008 в 13:34)
 

И что вы тогда запишите в массив способом паказанным выше? Не городите огород. Если вы этот массив запишите, например, в сессию, еще терпимо. Но ведь какого размера еще ваш массив полученный из базы, это раз. Во-вторых, сортировать такой массив возможно придется с помощью пользовательской функции - все зависит от того, что вы получаете из базы. Если вы хотите по шапке HTML таблицы сортировать ее по колонке, реверсируя выбор при каждом запросе, то не выдумывайте велосипеда, а сделайте примено так, как я приводил в последнем примере - запрос к MySQL сделает это быстро, и вернет уже готовое.

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

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