|
|
|
| Подскажите пожалуйста, как отсортировать пользователю общую таблицу по колонкам, полученную из объединения нескольких таблиц MySQL базы?
Вот для наглядности условие объединения:
$query = "
# показываем колонки
select
veh.VehicType,
env.EnvirType,
prt.ProtType,
sts.StandSizeType,
fdr.FrontDriveType,
trm.TrMarkName,
sut.PriceGen,
sut.StandGuarant,
sut.ExpGuarant,
sut.FullGuarant,
sut.Date
# откуда берем эти колонки, т.е. объединяемые таблицы
from
tyres_summarytable as sut,
tyres_vehicle as veh,
tyres_environment as env,
tyres_protectortype as prt,
tyres_standardsize as sts,
tyres_frontdrive as fdr,
tyres_trademark as trm
# условия объединения
where sut.VehicID = veh.VehicID
and sut.EnvirID = env.EnvirID
and sut.ProtTypeID = prt.ProtTypeID
and sut.StandSizeID = sts.StandSizeID
and sut.FrontDriveID = fdr.FrontDriveID
and sut.TrMarkID = trm.TrMarkID
order by sts.StandSizeType
";
|
Теоретически, наверное, можно указать в order by последовательно сортировку для каждого столбца (колонки) результирующей таблицы и потом через ссылку обратиться к соответствующему условию сортировки, но как это реализовать практически - не знаю.
Подскажите, пожалуйста... | |
|
|
|
|
|
|
|
для: ElWhite
(26.08.2005 в 13:54)
| | Не очень понятно, что имеется ввиду - (1) необходимо один раз отсортировать результат по нескольким колонкам, т.е. сначала данные сортируются по одной колонке, если в пределах одного значения первой колокни имеются уникальные значения во второй - то отсортировать их или (2) пользователю необходимо предоставить инструменты, чтобы он мог сортировать результат по первой колонке, по второй колонке и т.д.? | |
|
|
|
|
|
|
|
для: cheops
(26.08.2005 в 14:57)
| | Да, именно чтобы пользователь мог отсортировать по той колонке, по которой ему удобнее.
Себе осортировать я и сам могу в коде руками :) | |
|
|
|
|
|
|
|
для: ElWhite
(26.08.2005 в 15:51)
| | Смысл такой - в шапке таблицы, названия столбцов делают гиперссылками на эту же страницу, но с дополнительным параметром index.php?order=VehicType. Затем проверяется не передано ли странице параметр order, и, если это так, то формируется временная переменная с куском SQL-запроса: "ORDER BY veh.VehicType"
<?php
$str = "";
if(isset($_GET['VehicType'])) $str = "ORDER BY veh.VehicType";
if(isset($_GET['EnvirType'])) $str = "ORDER BY env.EnvirType";
// И так для каждого параметра...
?>
|
Затем это значение подставляется в конечный SQL-запрос
<?php
$query = "
select
veh.VehicType,
env.EnvirType,
prt.ProtType,
sts.StandSizeType,
fdr.FrontDriveType,
trm.TrMarkName,
sut.PriceGen,
sut.StandGuarant,
sut.ExpGuarant,
sut.FullGuarant,
sut.Date
from
tyres_summarytable as sut,
tyres_vehicle as veh,
tyres_environment as env,
tyres_protectortype as prt,
tyres_standardsize as sts,
tyres_frontdrive as fdr,
tyres_trademark as trm
where sut.VehicID = veh.VehicID
and sut.EnvirID = env.EnvirID
and sut.ProtTypeID = prt.ProtTypeID
and sut.StandSizeID = sts.StandSizeID
and sut.FrontDriveID = fdr.FrontDriveID
and sut.TrMarkID = trm.TrMarkID
$str";
?>
|
В результате как только странице будет передан нужный параметр - будет происходить автоматическая сортировка результата. | |
|
|
|
|
|
|
|
для: cheops
(26.08.2005 в 22:38)
| | Cheops, большое спасибо! Правда еще не проверял, но судя по всему все должно работать как изложенно. | |
|
|
|
|
|
|
|
для: cheops
(26.08.2005 в 22:38)
| | Сори, не работает. На сколько понимаю, дополнительная информация в ссылке не отрабатывается. Просто говоря, когда кликаю по ссылке $PHP_SELF?order=VehicType - страница перегружается, но сортировки не происходит.
Условия определения переменной $str работает правильно, т.е. если прописать
<?
$str = "";
if(!isset($_GET['VehicType'])) $str = "ORDER BY veh.VehicType";
?>
| (знак ! перед isset) вместо
<?
$str = "";
if(isset($_GET['VehicType'])) $str = "ORDER BY veh.VehicType";
?>
| , то сортировка устанавливается по колонке VehicType сразу по умолчанию.
Может ошибка в определении ссылки $PHP_SELF?order=VehicType ? | |
|
|
|
|
|
|
|
для: ElWhite
(29.08.2005 в 12:29)
| | Посмотрите содержимое массива $_GET - параметр туда попадает?
<?php
echo "<pre>";
print_r($_GET);
echo "</pre>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(29.08.2005 в 19:58)
| | Да, попадает без вопросов, например результат:
Array
(
[order] => VehicType
)
| Но значение той же колонки VehicType не сортируются. То же самое касается и остальных колонок таблицы. | |
|
|
|
|
|
|
|
для: ElWhite
(30.08.2005 в 09:26)
| | Если вывести в окно браузера SQL-запрос $query - конструкция ORDER BY в ней присутствует?
Если это так, то попробуйте взять запрос и выполнить его в каком-нибудь MySQL клиенте, например, phpMyAdmin - происходит сортировка или нет? | |
|
|
|
|
|
|
|
для: cheops
(30.08.2005 в 13:08)
| | $query выдает текст всего запроса к MySQL, кроме order by. То есть переменная $str не возвращает значение.
Я уж думаю, может ошибка в синтаксисе при вставке в запрос самой переменной. Хотя PHP не ругается, но сам запрос ведь пишется в соответствии с синтаксисом MySQL. Не-не, не думайте, переменная вставлена точто так, как Вы сказали до последней точки с запятой :)
А сам запрос с заданной руками сортировкой перед вставкой его в код я проверял прямо в MySQL. Все работало номально. | |
|
|
|
|
|
|
|
для: ElWhite
(30.08.2005 в 14:54)
| | Я обычно делают так пишу
<?php
echo "str - ".$str;
?>
|
непосредственно перед SQL-запросом. На что вам скорее всего будет выдано пустое значение. Далее двигайте вверх эту строку по скрипту пока не появится нужное значение $str - в этом районе где-то оно должно перезатираться. Т.е. нужно локализовать место, где значение $str подменяется. Может у вас SQL-запрос в фукнции выполняется, а значение $str не передаётся внутрь? | |
|
|
|
|
|
|
|
для: cheops
(30.08.2005 в 16:35)
| | Ерунда какая-то. Сделал как Вы посоветовали и выяснилось, что значения в переменную $str из условия при попытке сортировки вообще не передаются. При
<? $str = "";
if(isset($_GET['VehicType'])) $str = "order by veh.VehicType";
echo "str - ".$str; ?>
| - str - пусто
только если задать значение принудительно, не через условие
<? $str = "order by veh.VehicType";
if(isset($_GET['VehicType'])) $str = "order by veh.VehicType";
echo "str - ".$str; ?>
| - str - order by veh.VehicType
В любом случае большое спасибо за активную помощь. Не помню, чтобы встречал на форумах такого простого и исчерпывающего отзыва на свой вопрос. Спасибо. Буду искать ошибку дальше... | |
|
|
|