|
|
|
Алгоритм представления данных
|
|||
|---|---|---|---|
|
#18+
Подскажите, плз, простой алгоритм разворачивания данных, выдаваемых SQL-запросом. Пример: Код: plaintext 1. 2. 3. 4. Отобразить нужно так: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2007, 15:12 |
|
||
|
Алгоритм представления данных
|
|||
|---|---|---|---|
|
#18+
Пример запроса и структуру таблицы приведите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2007, 10:59 |
|
||
|
Алгоритм представления данных
|
|||
|---|---|---|---|
|
#18+
postuserПодскажите, плз, простой алгоритм разворачивания данных, выдаваемых SQL-запросом. Хм. Чертовски рад встретить разумную мысль и правильный подход там, где большинство придумывает весьма... неудачные решения. Итак, прежде всего, то, что Вы хотите сделать, называется "отобразить данные в виде кросс-таблицы". Это популярная задача, для решения которой есть множество инструментов, поэтому прежде всего имеет смысл поискать готовые решения для вашей области. Скажем, Microsoft Access как говорят, поддерживает такую операцию на уровне встроенного SQL. Далее, вопрос в том, какие инструменты у Вас есть и насколько тяжелую задачу Вы решаете. Скажем, "просто распихать данные", опираясь на что-нибудь типа дельфового TStringGrid (таблица, помнящая собственные данные) - весьма тривиально: проход по датасету, ищем либо вставляем нужные строку-колонку, запоминаем значение в ячейке. "Ищем либо вставляем" - обычная операция вставки в сортируемый список. С другой стороны, если Вы хотите написать полноценный инструмент OLAP, в первую очередь следует пропахать литературу на тему удобного хранения этих данных в памяти; их потребуется разместить так, чтобы быстро выполнялись доступ и свертки по различным наборам измерений. Это уже не форумного формата вещь, да и литературы не так много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2007, 13:16 |
|
||
|
Алгоритм представления данных
|
|||
|---|---|---|---|
|
#18+
СУБД - PostgreSQL 8.1.4 (планирую перейти на 8.2). ОС - Linux. Программа cgi - на Си, в крайнем случае php (но, думаю, разницы большой нет, так как отсутствуют всякие визуальные компоненты как в Delphi). Структура таблицы: table_traf 1. вх трафик 2. исх. трафик 3. дата (timestamp или date) 4. клиент Сильно широкой задачи нет. Желательно обеспечить возможность сортировки клиентов по трафику за каждый день (кто в этот день скачал больше всего и по убывающей). Сейчас разворачиваю данные на основе смены идентификатора клиента (данные в запросе отсортированы по клиенту, пока идентификатор предыдущий и последующий не меняется заполняю массив с индексом день, как только идю меняется вывожу предыдущий массив и записываю следующий итд), что не дает возможность сортировать по трафику. Да и не красиво как-то. Возникают проблемы когда запись на клиента всего одна (нет предыдущей и последующей). Есть ли возможность отображения в виде кросс-таблицы в Postgres? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2007, 18:17 |
|
||
|
Алгоритм представления данных
|
|||
|---|---|---|---|
|
#18+
Насчет возможностей Postgres не в курсе, это вопрос для соответствующего форума. Насчет сортировки по траффику - надеюсь, понятно, что отсортировать можно по траффику за один какой-то день либо иной период, но не "за каждый день поотдельности, сведя при этом в одну таблицу". Повторюсь: в первую очередь стоит думать о структуре данных, адекватной операциям. Скажем, предположим, задача: вывести данные в кросс-таблицу, при клике на одну из дат сортировать по траффику за эту дату. Таким образом, структура данных должна решать две задачи: вернуть значение по двум координатам (для отображения в таблице) и вернуть список клиентов-значений на указанную дату (для сортировки). Итого, получаем примерно следующее: класс, который содержит вектор дат, вектор клиентов и в какой-то форме список кортежей [дата,клиент,траффик]. Подойдет любая структура, хоть что-нибудь с map-ами, хоть просто список, отсортированный по дате, главное, чтобы в нем можно было эффективно найти данные за указанное число. При инициализации датасет перекладывается в список кортежей, при этом также заполняются вектора координат. Если сортировать датасет по дате, все получается совсем просто. Вектор дат по датам и сортируется, вектор клиентов - как требует задача. Изначально, быть может, по именам. Для построения таблицы код просто бежит в двойном цикле по векторам координат, запрашивает значение и рисует. Для клика - запрашивает диапазон кортежей на дату, сортирует их по траффику, соответственно переупорядочивает вектор клиентов, не забывая про тех, у кого нет записи на эту дату, и перерисовывает таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2007, 18:37 |
|
||
|
Алгоритм представления данных
|
|||
|---|---|---|---|
|
#18+
Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2007, 16:42 |
|
||
|
Алгоритм представления данных
|
|||
|---|---|---|---|
|
#18+
maXmoкак-то так, не проверял. При заранее неизвестном списке дат? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2007, 16:44 |
|
||
|
Алгоритм представления данных
|
|||
|---|---|---|---|
|
#18+
думаю, автор справится и без этого замечания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2007, 16:56 |
|
||
|
Алгоритм представления данных
|
|||
|---|---|---|---|
|
#18+
Обсуждалась более простая задача с заранее известным списком столбцов. http://sql.ru/forum/actualthread.aspx?tid=190031 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 11:49 |
|
||
|
Алгоритм представления данных
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatОбсуждалась более простая задача с заранее известным списком столбцов. http://sql.ru/forum/actualthread.aspx?tid=190031 Спасибо за ссылку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 09:27 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=16&tid=1346317]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 455ms |

| 0 / 0 |
