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

Quexx

Новичок
Сортировка по столбцам в таблице

Нужна помощь в том, как сделать сортировку в столбцах таблицы (у столбца есть свое наименование). При клике на имя сортируется весь столбец сначала по убыванию, потом по возрастанию или наоборот.
Сделал небольшой поиск по объявлениям. Пользователь заходит выбирает, то что ему нужно. Запрос из данной формы выводится в таблицу. Вот в этой таблице, которую запрашивет пользователь нужно сделать сортировку по столбцам. Сам делать не пробовал, потому как даже не знаю откуда начинать. База MySQL.
Заранее всем благодарен!
 

Quexx

Новичок
Да, это известно. А по конкретнее. Как я могу ORDER BY применить к ссылке, которая является заголовком столбца.

Таблица примерно такая:

товар | услуги | телефон | цена

Вот мне и нужно "товар" сделать ссылкой, чтобы в ней сохранялись все данные что ввел пользователь и еще в этойже ссылке подставить ORDER BY `товар` DESC а при следующем нажатии на ссылку, чтобы подставлялось ASC и так нужно сделать ссылку к каждому полю.
 

Фанат

oncle terrible
Команда форума
к ссылке ORDER BY применить нельзя.
ORDER BY можно применить к запросу.
который будет сформирован динамически, на основании данных из ссылки.
Андестенд?
То есть, код составления запроса будет выглядеть примерно так:
"SELECT * FROM table ORDER BY $order $dir"
соответственно, ты определяешь переменные $order и $dir по результатам переданных из браузера данных.
Только лучше не торопиться, и сначала сделать без изменения направления, а только сортировку по полю.
для этого делаешь массив, в котором перечислены все поля. по которым можно сортировать
$sort_fields=array('name','price');
по этому массиву ты будешь проверять переданный по ссылке параметр.
получаешь данные из ссылки и в зависимости от них устанавливаешь переменную $order, которую подставишь в запрос.
if (isset($_GET['sort']) and array_search($_GET['sort'],$sort_fields)!==FALSE) $order=$_GET['sort'];
else $order=$sort_fields[0];
если по ссылке ничего не передали - берём первое значение из массива.

вот и всё.
ссылки в заголовках столбцов сам составить в состоянии?

-~{}~ 14.03.06 09:34:

к Mysql, кстати, твоё вопрос не имеет ни малейшего отношения.
Это программирование исключительно на пхп.
твоя задача составить строку заданного формата.
То, что эта строка имеет какой-то смысл в MySQ - не имеет никакого значения.
Учись абстрагировать задачи.
 

Quexx

Новичок
получаешь данные из ссылки и в зависимости от них устанавливаешь переменную $sort, которую подставишь в запрос.

Ссылки или URL?
___________________
SELECT * FROM table ORDER BY $order $dir"
соответственно, ты определяешь переменные $order и $dir по результатам переданных из браузера данных.
$order и $dir - это что, например?
 

Ax

Новичок
у меня тут такая же проблема я прочитал ответ Фанат но мне не понятно:

if (isset($_GET['sort']) and array_search($_GET['sort'],$sort_fields)!==FALSE) $order=$_GET['sort'];
else $order=$sort_fields[0];
$query = "SELECT sort, dip0, dip1, dip2, dip3, dip4, dip5, dip6, FROM `main` ORDER BY $order ASC";

здесь получается сортировка по одному столбцу 'sort', а столбцов то много- это получается для каждого столбца надо отдельную страницу делать, в которой каждый раз будет передаватся другая переменная $_GET['sort'] или $_GET['dip0'] и т.д. и подставлятся в запрос! Или я не так понимаю? %)
 

Фанат

oncle terrible
Команда форума
хе-хе, смешная шутка.

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

А названия полей у тебя странные. Судя по ним, выглядит твоя таблица неправильно
 

Quexx

Новичок
Автор оригинала: Фанат
То есть, код составления запроса будет выглядеть примерно так:
"SELECT * FROM table ORDER BY $order $dir"
соответственно, ты определяешь переменные $order и $dir по результатам переданных из браузера данных.
Только лучше не торопиться, и сначала сделать без изменения направления, а только сортировку по полю.
для этого делаешь массив, в котором перечислены все поля. по которым можно сортировать
$sort_fields=array('name','price');
Спасибо, благодаря вашей подсказке получилось. Но как и было рекомендовано я не торопился и сделал сортировку только в одном направлении на всех столбцах, которых мне хотелось)).
Вот теперь как сделать сортировку на этих же столбцах и по возрастанию и по убыванию? Думаю что нужно как то отловить тот момент, что юзер уже нажал на ссылку-заголовок столбца и соответственно воспользоваться этим отловленным моментом (т.е если было ASC подставить DESC) при следующем клике по этой же ссылке. Правильно мыслю? Подскажите как это осуществляется.
 

Фанат

oncle terrible
Команда форума
это осуществляется примитивным кодом на пхп. который формирует ссылку
"отловить момент" очень просто. если юзер уже нажал на ссылку-заголовок, это значит, что он передал в скрипт переменную.
 

Quexx

Новичок
Вроде получилось только вот сортировка получается какая-то зависящая. То есть если я сортировал столбец дата и остановился на сортировке по убыванию, то следующая сортировка в любом столбце будет производится по возрастанию. Вроде думаю как-то не принципиально, но всеже. Что я не доглядел? На что нужно обратить внимание?
 

Quexx

Новичок
ты не углядел какую-то проверку
Помоему, что-то не так делаю. Подскажите какой проверки не хватает.

ORDER BY $fsort $ordsort
PHP:
<?php
$sort_fields=array('price','tovar','usluga');
            if (isset($_GET['order']) && ($_GET['order_p'])!==FALSE) {
                $fsort=$_GET['order'];
                $ordsort=$_GET['order_p'];
            if ($ordsort=="ASC") {
                $opod="DESC";
            } else {
                $opod="ASC";
            }
            } else {
                $fsort=$sort_fields[0];
                $ordsort="ASC";
                $opod="ASC";
            }

echo "<a href=\"$sort_fields[0]&amp;order_p=$opod\">прайс</a>";
echo "<a href=\"$sort_fields[1]&amp;order_p=$opod\">товар</a>";
echo "<a href=\"$sort_fields[2]&amp;order_p=$opod\">услуга</a>";
?>
-~{}~ 22.04.06 13:34:

Видимо придется самому. Скажите тогда вообще правильно хоть я сделал? А то работать то оно работает, но не всегда же получается так : Если все работает, то правильно.
 

Фанат

oncle terrible
Команда форума
echo "<a href=\"$sort_fields[0]&order_p=$opod\">прайс</a>";
странная ссылка.

-~{}~ 22.04.06 13:47:

opod надо ставить только той ссылке, по которой было отсортировано сейчас.
остальным - не нужно.
 

Quexx

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

opod надо ставить только той ссылке, по которой было отсортировано сейчас.
Хорошо, спасибо! Теперь понял, почему получается сортировка зависимой.)
 

Фанат

oncle terrible
Команда форума
ага.
я пишу, что ты недоглядел какую-то проверку, а ты пишешь сюда всё, кроме проверок. чтобы меня не утруждать.
а потом, жалобно так вопрошаешь - "ну что, никто помочь бедняжечке не соберётся? придётся самому кряхтеть?"
ню-ню...

-~{}~ 22.04.06 14:39:

и, как всегда
тема по формированию строк в пхп, размещается в форуме по мускулю
 

Quexx

Новичок
Нет, Вы меня не поняли. Проверки эти относятся не к сортировке, а к проверке данных в форме, т.е если пользователь в форме выбрал поиск по услуге, то значит подставить в ссылку, ну и наоборот, и они никак не влияют на ORDER BY $fsort $ordsort. Я к тому что если я бы указал всю ссылку какая есть, то мне нужно было бы описать все эти проверки для формы, иначе бы ни кто не понял откуда взялись переменные в ссылке. Извиняюсь.

Ну а тему, видимо просто не перенесли. Иначе зачем создавать такуюже тему только в другом форуме. Проще перенести эту.))
 

Фанат

oncle terrible
Команда форума
прикольно.
виноват, значит, модератор.
а самостоятельно думать тебе не положено
 
Сверху