powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Алгоритм представления данных
10 сообщений из 10, страница 1 из 1
Алгоритм представления данных
    #34239338
postuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, плз, простой алгоритм разворачивания данных, выдаваемых SQL-запросом. Пример:
Код: plaintext
1.
2.
3.
4.
клиент  1   2006 - 01 - 01    5  шт
клиент  1   2006 - 01 - 02    4  шт
клиент  1   2006 - 01 - 03    52  шт
клиент  2   2006 - 01 - 02    3  шт
клиент  2   2006 - 01 - 03    5  шт

Отобразить нужно так:
Код: plaintext
1.
2.
                2006 - 01 - 01                2006 - 01 - 02       2006 - 01 - 03 
клиент  1              5                      4                     52 
клиент  2             нет                   3                     5 
Причем даты могут быть пропущены, начинаться с разных чисел. Данные отсортированы по клиентам, но можно и др сортировку применить.
...
Рейтинг: 0 / 0
Алгоритм представления данных
    #34242133
^ozzy^
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример запроса и структуру таблицы приведите.
...
Рейтинг: 0 / 0
Алгоритм представления данных
    #34242666
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
postuserПодскажите, плз, простой алгоритм разворачивания данных, выдаваемых SQL-запросом.
Хм. Чертовски рад встретить разумную мысль и правильный подход там, где большинство придумывает весьма... неудачные решения.

Итак, прежде всего, то, что Вы хотите сделать, называется "отобразить данные в виде кросс-таблицы". Это популярная задача, для решения которой есть множество инструментов, поэтому прежде всего имеет смысл поискать готовые решения для вашей области. Скажем, Microsoft Access как говорят, поддерживает такую операцию на уровне встроенного SQL.

Далее, вопрос в том, какие инструменты у Вас есть и насколько тяжелую задачу Вы решаете. Скажем, "просто распихать данные", опираясь на что-нибудь типа дельфового TStringGrid (таблица, помнящая собственные данные) - весьма тривиально: проход по датасету, ищем либо вставляем нужные строку-колонку, запоминаем значение в ячейке. "Ищем либо вставляем" - обычная операция вставки в сортируемый список. С другой стороны, если Вы хотите написать полноценный инструмент OLAP, в первую очередь следует пропахать литературу на тему удобного хранения этих данных в памяти; их потребуется разместить так, чтобы быстро выполнялись доступ и свертки по различным наборам измерений. Это уже не форумного формата вещь, да и литературы не так много.
...
Рейтинг: 0 / 0
Алгоритм представления данных
    #34243794
postuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СУБД - PostgreSQL 8.1.4 (планирую перейти на 8.2). ОС - Linux. Программа cgi - на Си, в крайнем случае php (но, думаю, разницы большой нет, так как отсутствуют всякие визуальные компоненты как в Delphi).
Структура таблицы:
table_traf
1. вх трафик
2. исх. трафик
3. дата (timestamp или date)
4. клиент
Сильно широкой задачи нет. Желательно обеспечить возможность сортировки клиентов по трафику за каждый день (кто в этот день скачал больше всего и по убывающей).
Сейчас разворачиваю данные на основе смены идентификатора клиента (данные в запросе отсортированы по клиенту, пока идентификатор предыдущий и последующий не меняется заполняю массив с индексом день, как только идю меняется вывожу предыдущий массив и записываю следующий итд), что не дает возможность сортировать по трафику. Да и не красиво как-то. Возникают проблемы когда запись на клиента всего одна (нет предыдущей и последующей).
Есть ли возможность отображения в виде кросс-таблицы в Postgres?
...
Рейтинг: 0 / 0
Алгоритм представления данных
    #34243838
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет возможностей Postgres не в курсе, это вопрос для соответствующего форума.

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

Повторюсь: в первую очередь стоит думать о структуре данных, адекватной операциям. Скажем, предположим, задача: вывести данные в кросс-таблицу, при клике на одну из дат сортировать по траффику за эту дату. Таким образом, структура данных должна решать две задачи: вернуть значение по двум координатам (для отображения в таблице) и вернуть список клиентов-значений на указанную дату (для сортировки).

Итого, получаем примерно следующее: класс, который содержит вектор дат, вектор клиентов и в какой-то форме список кортежей [дата,клиент,траффик]. Подойдет любая структура, хоть что-нибудь с map-ами, хоть просто список, отсортированный по дате, главное, чтобы в нем можно было эффективно найти данные за указанное число.

При инициализации датасет перекладывается в список кортежей, при этом также заполняются вектора координат. Если сортировать датасет по дате, все получается совсем просто. Вектор дат по датам и сортируется, вектор клиентов - как требует задача. Изначально, быть может, по именам.

Для построения таблицы код просто бежит в двойном цикле по векторам координат, запрашивает значение и рисует. Для клика - запрашивает диапазон кортежей на дату, сортирует их по траффику, соответственно переупорядочивает вектор клиентов, не забывая про тех, у кого нет записи на эту дату, и перерисовывает таблицу.
...
Рейтинг: 0 / 0
Алгоритм представления данных
    #34249522
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
select ClientName, sum(if(tdate='2006-01-01',traf, 0 )) from tbl group by ClientName;
как-то так, не проверял. Сумм ставь столько сколько надо.
...
Рейтинг: 0 / 0
Алгоритм представления данных
    #34249535
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoкак-то так, не проверял.
При заранее неизвестном списке дат?
...
Рейтинг: 0 / 0
Алгоритм представления данных
    #34249587
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
думаю, автор справится и без этого замечания.
...
Рейтинг: 0 / 0
Алгоритм представления данных
    #34258103
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обсуждалась более простая задача с заранее известным списком столбцов.

http://sql.ru/forum/actualthread.aspx?tid=190031
...
Рейтинг: 0 / 0
Алгоритм представления данных
    #34260499
postuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBatОбсуждалась более простая задача с заранее известным списком столбцов.

http://sql.ru/forum/actualthread.aspx?tid=190031
Спасибо за ссылку.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Алгоритм представления данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]