|
|
|
|
<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=....."> Далее теряюсь. | |
|
|
|
|
|
|
|
для: медведь
(09.09.2008 в 02:58)
| | А зачем передавать pole=pole1? Вы же сортируете не столбец, а строку? Значит сделать "логический триггер" и сортировать массив (если это данные массива), либо устанавливать в запросе к таблице сортировку DESC или ASC, в зависимости от состояния этого треггера. | |
|
|
|
|
|
|
|
для: медведь
(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>"; //и т.д.
?>
|
| |
|
|
|
|
|
|
|
для: 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 == 1 ? "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'])-1 : 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
|
| |
|
|
|
|
|
|
|
для: 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 и т.д.
|
Но все-равно не получается( | |
|
|
|
|
|
|
|
для: медведь
(09.09.2008 в 12:55)
| | Ну вы даете. Если вы не хотите обращаться каждый раз к базе, то полученный массив из базы надо либо кешировать, либо сохранить где-то, это раз. Два - сортировать тогда надо сохраненный массив. | |
|
|
|
|
|
|
|
для: sim5
(09.09.2008 в 13:00)
| | а так его можно записать?
$pole1[]=result['pole1'];
|
и как, кстати, лучше (быстрее) | |
|
|
|
|
|
|
|
для: медведь
(09.09.2008 в 13:03)
| | Вы что из базы получаете значение только одного поля таблицы? | |
|
|
|
|
|
|
|
для: sim5
(09.09.2008 в 13:22)
| | нет, 10 | |
|
|
|
|
|
|
|
для: медведь
(09.09.2008 в 13:34)
| | И что вы тогда запишите в массив способом паказанным выше? Не городите огород. Если вы этот массив запишите, например, в сессию, еще терпимо. Но ведь какого размера еще ваш массив полученный из базы, это раз. Во-вторых, сортировать такой массив возможно придется с помощью пользовательской функции - все зависит от того, что вы получаете из базы. Если вы хотите по шапке HTML таблицы сортировать ее по колонке, реверсируя выбор при каждом запросе, то не выдумывайте велосипеда, а сделайте примено так, как я приводил в последнем примере - запрос к MySQL сделает это быстро, и вернет уже готовое. | |
|
|
|