Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как "развернуть" таблицу / 12 сообщений из 12, страница 1 из 1
02.04.2004, 17:39
    #32467560
AlexPretov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "развернуть" таблицу
В таблице указаывается диапазон значения

Код: plaintext
1.
2.
3.
4.
5.
 BeginA     EndA
  -----      -----
 
      10          12 
      25          28 

нужно составить таблицу с перечислением этих значений
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
     A 
  -----
 
      10 
      11 
      12 
      25         
      26 
      27 
      28 


________________
С уважением, Alex Pretov
...
Рейтинг: 0 / 0
13.04.2004, 16:40
    #32479574
system2002
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "развернуть" таблицу
На мой взгляд это лучше делать в клиенте
...
Рейтинг: 0 / 0
14.04.2004, 15:49
    #32481331
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "развернуть" таблицу
В общем-то тебе правильно подсказали.

Можно еще табличку зафигачить уже с готовыми знаениями...

А можно и переменные попробовать использовать... Тут я пока ни придумать ни проверить не могу!

. http://sql.ru/]mahoune
...
Рейтинг: 0 / 0
14.04.2004, 17:14
    #32481501
AlexPretov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "развернуть" таблицу
system2002 На мой взгляд это лучше делать в клиенте Сейчас так все и делается, правда с некоторой оптимизацией, но все равно процесс долгий.

mahouneМожно еще табличку зафигачить уже с готовыми знаениями...
А поподробней можно?
________________
С уважением, Alex Pretov
...
Рейтинг: 0 / 0
16.04.2004, 12:14
    #32484057
AlexPretov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "развернуть" таблицу
Спасибо всем кто отклинулся.

Нашел изящное решение, может кому пригодиться.

Делается это на стороне сервера, одним sql скриптом, только нужно сделать подготовительные действия.

1. Создаем табличку целых чисел от 0 до max(EndA - BeginA) любым удобным способом. Можно и больше взять.
Код: plaintext
create table mul (k int NOT NULL PRIMARY KEY);


2. И основной запрос
Код: plaintext
1.
2.
3.
4.
create temporary tbl1_t uat as select *, (EndA-BeginA) as range from tbl1;
select BeginA+mul.k as A
  from tbl1_t, mul
 where tbl1_t.range >= mul.k ;



________________
С уважением, Alex Pretov
...
Рейтинг: 0 / 0
16.04.2004, 16:15
    #32484637
Stellar.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "развернуть" таблицу
Очень медленный способ.
гораздо проще сделать цикл внутри приложения, особенно если перебираются целые числа
...
Рейтинг: 0 / 0
16.04.2004, 19:09
    #32485025
AlexPretov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "развернуть" таблицу
stellarОчень медленный способ.
очень смелое заявление, но, к счастью, неверное!

stellarгораздо проще сделать цикл внутри приложения, особенно если перебираются целые числа сразу возникают возражения:
1) их треда следует, что первоначальный вариант именно так и был реализован, но по извесным причинам он не устаривал.
2) а Вы накладные расходы прикинули, скажем, на коммуникацию?
3) пример тестовый, приведены только те столбцы которые имеют отношение к интересующему меня вопросу.
В общем, ради собственного интереса, проведите тестирование двух вариантов. Думаю, Вам многое станет ясным.

Есть еще одно обстоятельство публикации этого скрипта -- можно решить эту задачу средствами SQL и показано как.


________________
С уважением, Alex Pretov
...
Рейтинг: 0 / 0
19.04.2004, 09:47
    #32485823
system2002
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "развернуть" таблицу
А что если сделать функцию для MySQL которая выводит этот список???
...
Рейтинг: 0 / 0
19.04.2004, 18:46
    #32486898
Stellar.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "развернуть" таблицу
очень смелое заявление, но, к счастью, неверное!

сразу возникают возражения:
1) их треда следует, что первоначальный вариант именно так и был реализован, но по извесным причинам он не устаривал.
2) а Вы накладные расходы прикинули, скажем, на коммуникацию?
3) пример тестовый, приведены только те столбцы которые имеют отношение к интересующему меня вопросу.
В общем, ради собственного интереса, проведите тестирование двух вариантов. Думаю, Вам многое станет ясным.

Есть еще одно обстоятельство публикации этого скрипта -- можно решить эту задачу средствами SQL и показано как.

Эта задача средствами SQL решается крайне неэффективно.
Создание временной таблицы + две выборки вместо одной + простого цикла - это самое отвратительное решение, которое только можно предложить.
OS: FreeBSD, использована библиотека mysql++.
СУБД - MySQL 4.0; таблицы - предлженные в примере.
Спешу Вас разочаровать, но разница - 1800 раз. В пользу простого цикла.
...
Рейтинг: 0 / 0
19.04.2004, 20:38
    #32486973
AlexPretov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "развернуть" таблицу
а по подробней можно? Я что-то не до конца понимаю.... готов поверить в разницу в 2 раза, но 3(!) порядка... уж простите, но код, тестовый скрипт хотелось бы увидеть, воспроизвести результаты...

Я получал такие данные (восстанавливаю по записям)...
ОС -- WindowsXP(SP1)
СУБД -- MySQL 4.0.16

Исходные данные:
Таблица tbl1 - 143100 записей (исходная)
Таблица tbl2 - 1230000 записей (развернутая)

Вариант 1. "Разворот" таблицы на клиенте.
Язык приложения -- ActiveState Perl 5.8.0
Библиотека -- MySQL.pm Взята с официального сайта (dev.mysql.com)
Время выполнения -- 3 мин 21 сек

Вариант 2. Средствами SQL запроса
Скрипт загружался через утилиту mysql.exe
Время выполнения -- 58 сек.

Я получил разницу в 3 раза.

________________
С уважением, Alex Pretov
...
Рейтинг: 0 / 0
20.04.2004, 15:14
    #32487974
Stellar.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "развернуть" таблицу
Использовался C++ - потому такая разница.
Для Перла, конечно, все не так заметно.
...
Рейтинг: 0 / 0
20.04.2004, 16:05
    #32488127
AlexPretov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "развернуть" таблицу
stellarИспользовался C++ - потому такая разница. в 1800 раз???? Перл, компилируются в промежуточный байт-код, который затем и исполняется. Технология которая в настоящее время довольно широко применяется и соответсвенно отработана. Поэтому если и есть отставание то не такое катастрофичекое! Кстати, компиляторы SQL тоже подобную технологию используют. Это первое. Второе, мощность процессоров сегодня достаточна чтобы нивелировать даже эту разницу между Perl и C++ на таки небольшом объеме данных.

И основное, меня очень смущает Ваша чрезмерная краткость. Ни результаты таймингов, ни описание теста, ничего.... Такое подозрение -- а не громогласнное ли это заявление?

________________
С уважением, Alex Pretov
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как "развернуть" таблицу / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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