The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"JavaScript - связанные SELECT-ы"
Отправлено XAnder, 04-Мрт-05 09:31 
Я сейчас работаю над схожей задачей. Не знаю, пригодится ли, но на всякий случай опишу.

Работаю с MySQL на PHP. В базе есть куча таблиц, некоторые связаны друг с другом внешними ключами или таблицами-связками. Структура базы сложна и может со временем изменяться. Для примера возьмём Ваш случай: три таблицы - Дома, Улицы, Районы - связаны внешними ключами Дома -> Улицы, Улицы -> Районы. Нужно выбирать SELECTом строку из Дома.

Предположим, что домов неподъёмное количество. Выдавать полный их список клиенту (даже в скрытом виде - внутри JavaScript, как в Вашем примере) - это плодить тонны ненужного трафика.

Сначала делаем SELECT для домов пустым и предлагаем выбрать улицу другим SELECTом, на который весим onChange следующего содержания:

open(
"filter.php?form=<название формы>&select=<название SELECTа>" +
"&tname=<название целевой таблицы (Дома)>" +
"&filterid=" + this.options[this.selectedIndex].value,
"filterWindow", "dependent=yes,width=100,height=100"
);

Смысл - подать запрос к серверу, открыв маленькое окошко, которое потом само себя закроет. Понимаю, что решение несколько кособоко, но работает :) Можно попробовать с IFRAME, наверное будет покрасивее, сам не пробовал.

Скрипт filter.php сделает запрос к БД, ему известно из какой таблицы брать данные, по какому значению внешнего ключа их фильтровать, в какую форму и в какой SELECT их складывать. Дальше - дело техники.

Аналогично и улиц слишком много - делаем то же самое для районов. В итоге имеем три SELECTа (а можно и четыре, и пять, и сколько влезет), связанных фильтрами, работающими на стороне сервера. Сразу же клиенту нужно передавать только районы, которых (будем считать) совсем немного.

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру