Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите составить запрос, выборка в 2 столбца разных данных 
V
    Опции темы
chiffa
Дата 13.1.2015, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



Всем привет. Прошу помощи в составлении запроса. Есть таблица table1 с полями и записями

 id    type    sum    date
 1     2     10     2015-01-01
 2     2     20     2015-01-01
 3     2     30     2015-01-01
 3     3     30     2015-01-01

Мне необходисо посторить выборку типа


Type2    sum    Type3    sum
  2     10      3     30
  2     20      3      -    
  2     30      3      -

то есть в одной таблице совместить выбор 2х типов операций. Буду признателен за помощь! Заранее спасибо!



PM MAIL   Вверх
Akina
Дата 13.1.2015, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Не видно логики получения ЭТОГО результата из ЭТИХ исходных данных. Почему в первой записи конечного набора оказались именно данные из строк 1 и 4 исходного набора?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
chiffa
Дата 13.1.2015, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



Выборка там идет по дате. Но в примере дата у всех одна. Трудность составления запроса в том, что у меня не получается выбрать именно ОДНУ запись с типом 3. 
Я пытался сделать через JOIN, но результат получался таким

Type2    sum    Type3    sum
  2          10        3       30
  2          20        3       30    
  2          30        3       30

то есть оно дублировало записи, вместо вывода null
PM MAIL   Вверх
Akina
Дата 13.1.2015, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Повторяю - определите ЛОГИКУ построения результата.
А ещё лучше - опишите ВСЮ задачу. Сдаётся мне, что косяк - в выборе пути.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
chiffa
Дата 13.1.2015, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



так я ж описываю задачу. нужно из таблицы выбрать данные и вывести их в указаном выше виде, в таком виде их дальше обрабатывает шаблонизатор...
PM MAIL   Вверх
Akina
Дата 13.1.2015, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Не-а... ты описываешь свою попытку решить некую задачу. Причём не алгоритмически, а "ну вот как-то так".
Почему конечный результат именно такой, как указано выше, а не, например, такой:
Код

Type2    sum    Type3    sum
  2       10      3        -
  2       20      3        -    
  2       30      3       30




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
chiffa
Дата 13.1.2015, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



гм... ладно. есть некий шабонизатор, который вместо тегов подствляет данные полученные из базы. порядковый номер вывода соотвествует порядковому номеру тегу в правилах шаблонизатора.

то есть 

{type1} {sum1} {type2} {sum2}

таким образом на выходе будет в таблица, где 
{type1} - первая колонка вывода из запроса
{sum1} - вторая  колонка вывода из запроса 
{type2} - треть  колонка вывода из запроса
{sum2} - четвертая  колонка вывода из запроса

ЗАДАЧА: сделать такой вывод из базы
PM MAIL   Вверх
Akina
Дата 13.1.2015, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Ладно, повангуем.

Итак, у тебя есть некий набор данных, приведённый выше. Из него делается две независимые выборки. Потом их нужно собрать в одну, объединяя записи выборок по их порядковому номеру.

Для этого первым делом необходимо будет получить для каждой из выборок поле порядкового номера записи в выборке. Это делается несложно, обычная нумерация с использованием переменной.
Имея нумерации обеих выборок, нужно получить таблицу сводной нумерации - т.е. опорную таблицу номеров, в которой есть любой номер, встречающийся хотя бы в одной выборке. Тоже несложно - получаем максимальное количество записей в одной выборке по всем и генерируем опорную таблицу номеров.
Остаётся привязать к опорной таблице все частные выборки, и для тех опорных записей, для которых нет записи в частной выборке, выполнить соотв. подстановку с помощью COALESCE.
Запрос получится... ммм... нетривиальный - громоздкий, сравнительно медленный и плохосопровождаемый.

Это - если стараться выполнить поставленную задачу запросом. Но есть и другой подход - реализовать требуемое в рамках хранимой процедуры. Тогда для каждого частного запроса открывается свой курсор, в цикле перебираются параллельно все курсоры до тех пор, пока хотя бы в одном из них остаются записи. Извлечённые из курсоров записи объединяются и копируются в создаваемую в процедуре временную таблицу. По завершении цикла делается один селект из временной таблицы. 

Всё это при условии, что я верно понимаю поставленную задачу, конечно.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
chiffa
Дата 14.1.2015, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



Спасибо за идею! Сделал через временную таблицу!

Это сообщение отредактировал(а) chiffa - 14.1.2015, 13:05
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.