![]() |
|
Модераторы: skyboy |
![]()
|
|
| chiffa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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х типов операций. Буду признателен за помощь! Заранее спасибо! |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Не видно логики получения ЭТОГО результата из ЭТИХ исходных данных. Почему в первой записи конечного набора оказались именно данные из строк 1 и 4 исходного набора?
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| chiffa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
Выборка там идет по дате. Но в примере дата у всех одна. Трудность составления запроса в том, что у меня не получается выбрать именно ОДНУ запись с типом 3.
Я пытался сделать через JOIN, но результат получался таким Type2 sum Type3 sum 2 10 3 30 2 20 3 30 2 30 3 30 то есть оно дублировало записи, вместо вывода null |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Повторяю - определите ЛОГИКУ построения результата.
А ещё лучше - опишите ВСЮ задачу. Сдаётся мне, что косяк - в выборе пути. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| chiffa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
так я ж описываю задачу. нужно из таблицы выбрать данные и вывести их в указаном выше виде, в таком виде их дальше обрабатывает шаблонизатор...
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Не-а... ты описываешь свою попытку решить некую задачу. Причём не алгоритмически, а "ну вот как-то так".
Почему конечный результат именно такой, как указано выше, а не, например, такой:
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| chiffa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
гм... ладно. есть некий шабонизатор, который вместо тегов подствляет данные полученные из базы. порядковый номер вывода соотвествует порядковому номеру тегу в правилах шаблонизатора.
то есть {type1} {sum1} {type2} {sum2} таким образом на выходе будет в таблица, где {type1} - первая колонка вывода из запроса {sum1} - вторая колонка вывода из запроса {type2} - треть колонка вывода из запроса {sum2} - четвертая колонка вывода из запроса ЗАДАЧА: сделать такой вывод из базы |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Ладно, повангуем.
Итак, у тебя есть некий набор данных, приведённый выше. Из него делается две независимые выборки. Потом их нужно собрать в одну, объединяя записи выборок по их порядковому номеру. Для этого первым делом необходимо будет получить для каждой из выборок поле порядкового номера записи в выборке. Это делается несложно, обычная нумерация с использованием переменной. Имея нумерации обеих выборок, нужно получить таблицу сводной нумерации - т.е. опорную таблицу номеров, в которой есть любой номер, встречающийся хотя бы в одной выборке. Тоже несложно - получаем максимальное количество записей в одной выборке по всем и генерируем опорную таблицу номеров. Остаётся привязать к опорной таблице все частные выборки, и для тех опорных записей, для которых нет записи в частной выборке, выполнить соотв. подстановку с помощью COALESCE. Запрос получится... ммм... нетривиальный - громоздкий, сравнительно медленный и плохосопровождаемый. Это - если стараться выполнить поставленную задачу запросом. Но есть и другой подход - реализовать требуемое в рамках хранимой процедуры. Тогда для каждого частного запроса открывается свой курсор, в цикле перебираются параллельно все курсоры до тех пор, пока хотя бы в одном из них остаются записи. Извлечённые из курсоров записи объединяются и копируются в создаваемую в процедуре временную таблицу. По завершении цикла делается один селект из временной таблицы. Всё это при условии, что я верно понимаю поставленную задачу, конечно. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| chiffa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
Спасибо за идею! Сделал через временную таблицу!
Это сообщение отредактировал(а) chiffa - 14.1.2015, 13:05 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |