powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как "развернуть" таблицу
12 сообщений из 12, страница 1 из 1
Как "развернуть" таблицу
    #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
Как "развернуть" таблицу
    #32479574
system2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На мой взгляд это лучше делать в клиенте
...
Рейтинг: 0 / 0
Как "развернуть" таблицу
    #32481331
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем-то тебе правильно подсказали.

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

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

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

mahouneМожно еще табличку зафигачить уже с готовыми знаениями...
А поподробней можно?
________________
С уважением, Alex Pretov
...
Рейтинг: 0 / 0
Как "развернуть" таблицу
    #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
Как "развернуть" таблицу
    #32484637
Stellar.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень медленный способ.
гораздо проще сделать цикл внутри приложения, особенно если перебираются целые числа
...
Рейтинг: 0 / 0
Как "развернуть" таблицу
    #32485025
AlexPretov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stellarОчень медленный способ.
очень смелое заявление, но, к счастью, неверное!

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

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


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

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

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

Эта задача средствами SQL решается крайне неэффективно.
Создание временной таблицы + две выборки вместо одной + простого цикла - это самое отвратительное решение, которое только можно предложить.
OS: FreeBSD, использована библиотека mysql++.
СУБД - MySQL 4.0; таблицы - предлженные в примере.
Спешу Вас разочаровать, но разница - 1800 раз. В пользу простого цикла.
...
Рейтинг: 0 / 0
Как "развернуть" таблицу
    #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
Как "развернуть" таблицу
    #32487974
Stellar.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использовался C++ - потому такая разница.
Для Перла, конечно, все не так заметно.
...
Рейтинг: 0 / 0
Как "развернуть" таблицу
    #32488127
AlexPretov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stellarИспользовался C++ - потому такая разница. в 1800 раз???? Перл, компилируются в промежуточный байт-код, который затем и исполняется. Технология которая в настоящее время довольно широко применяется и соответсвенно отработана. Поэтому если и есть отставание то не такое катастрофичекое! Кстати, компиляторы SQL тоже подобную технологию используют. Это первое. Второе, мощность процессоров сегодня достаточна чтобы нивелировать даже эту разницу между Perl и C++ на таки небольшом объеме данных.

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

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


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