Есть ли способ найти все различные значения для нескольких столбцов в одном запросе? - PullRequest
1 голос
/ 07 июня 2011

Я был бы очень признателен за помощь / указатели по следующей проблеме.

Справочная информация:

Версия базы данных: Oracle 9i

Java-версия: 1.4.2

Проблема

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

например:.

CREATE TABLE mytable
(
document_id integer,
filename varchar(255),
added_date date,
created_by varchar(32),
....
)

Из-за проблем с сетью / задержкой между веб-сервером и сервером базы данных я хотел бы свести к минимуму количество запросов к базе данных.

Документы перечислены на веб-странице, но существуют тысячи различных документов.

Чтобы облегчить навигацию, мы предоставляем фильтры на веб-странице для выбора только документов, соответствующих определенному значению - например, созданный пользователем 'joe bloggs' или созданный '01 -01-2011 '. Кроме того, предоставляется пейджинг, поэтому вызов db вызывает следующие 50 документов или что-то в этом роде.

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

Это занимает довольно много времени из-за задержки в сети и того факта, что это означает 5 дополнительных запросов.

Мой вопрос

Я хотел бы знать, есть ли способ получить эту же информацию в одном запросе?

Например, есть ли способ получить отличные результаты из этой таблицы в такой форме:

DistinctValue    Type
01-01-2011       added_date
01-02-2011       added_date
01-03-2011       added_date
Joe Bloggs       created_by
AN Other         created_by
....             ...

Я предполагаю, что одна из проблем, описанных выше, заключается в том, что типы данных различаются по столбцам, поэтому даты и варианты не могут быть возвращены в столбце "DistinctValue".

Есть ли лучший / стандартный подход к этой проблеме?

Большое спасибо заранее.

Jay

Редактировать

Как я уже упоминал в комментарии ниже, я подумал о возможном более эффективном использовании памяти / нагрузки, который устраняет первоначальное требование для объединения запросов -

Я представляю, как это могло бы работать вместо заполнения выпадающих первоначально, чтобы они реагировали на пользователя набрав, а затем есть «подсказчик» выпадающий стиль появляется только тех отдельные значения, которые соответствуют введенным текст. Я думаю, что это будет означать) сохраняя отдельные запросы для отдельные значения, но б) только работает запросы индивидуально по мере необходимости, и с) сокращение результатов на фильтрация уникальных значений на текст пользователя.

Ответы [ 2 ]

4 голосов
/ 07 июня 2011

Этот запрос вернет вывод, как вы описали выше:

SELECT DocumentID As DocumentID, 'FileName' As AttributeType, FileName As DistinctValue
 FROM TableName
UNION
SELECT DocumentID, 'Added Date', Added_date FROM TableName
UNION
SELECT DocumentID, 'Created By', created_by FROM TableName
UNION
....

Если у вас есть привилегия, вы можете создать представление, используя этот SQL, и вы можете использовать его для своих запросов.

0 голосов
/ 07 июня 2011

Из-за проблем с сетью / задержками между веб-сервером и сервером базы данных я бы хотел минимизировать количество запросов к базе данных.

Документы перечислены на веб-странице, ноТысячи разных документов.

Вы можете посмотреть Lucene .Всякий раз, когда я вижу «минимизировать запросы к базе данных» в сочетании с «поиском документов», я думаю об этом.Я использовал это с очень хорошим успехом, и его можно использовать в средах только для чтения или обновления.Ответ Oracle - Oracle Text, но (для меня, во всяком случае) он немного медленный для настройки и использования.Зависит от технических ресурсов и сильных сторон вашей компании.

В любом случае, наверняка превзойдет множество запросов к БД для каждого соединения.

...