![]() |
|
Модераторы: skyboy |
![]()
|
|
| PashaLost |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.1.2008 Репутация: нет Всего: нет |
Добры день, Господа !
Подскажите, как составить SELECT-запрос (именно запроc, а не что-нибудь другое) из следующей структуры таблиц БД: 1) Имеем: Таблицу Games - хранит информацию об игре. Таблицу Rounds - (одной игре соответствует несклолько раундов) хранит информацию о раундах Таблицу Cards - (одному раунду соответствует несколько карт) хранит информацию о картах 2) Необходимо: Написать ОДИН SELECT запрос, который выведет информацию из трёх таблиц в одну ТАК, чтобы в первом стобце размещалась информация об игре, во втором столбце размещалась информация о ПЕРВОМ раунде игры, в следующем - информация о всех картах ПЕРВОГО раунда, следующем информация о ВТОРОМ раунде и т.д. НАДЕЮСЬ, суть вопроса прояснится больше из картинки ниже Проблему можно решить с помощью временной таблицы, пробежаться курсором по всем записям и бла бла бла но это ОЧЕНЬ медленно, и каждый раз нужно очищать и записывать в таблицу - а если записей несколько тысяч - тогда вообще кирдык. А подготовленный запрос бы с этим справился. ![]() Это сообщение отредактировал(а) PashaLost - 5.7.2012, 23:35 Присоединённый файл ( Кол-во скачиваний: 5 )
GameTables.png 14,92 Kb |
|||
|
||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Колличество столбцов с Round и Cards переменное или всегда равно 4?
-------------------- Слава Україні! |
|||
|
||||
| PashaLost |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.1.2008 Репутация: нет Всего: нет |
Количество столбцов всегда одинаково (раундов всегда 4), однако самих раундов всех 4 в одной игре может не существовать (тогда записывать NULL), количество карт во втором раунде - 3 (всех их нужно запихивать в одну ячейку функцией GROUP_CONCAT) в других по одной (но это не важно что одна - нужно всё равно суммировать все имеющиеся в одном раунде)
Это сообщение отредактировал(а) PashaLost - 6.7.2012, 01:12 |
|||
|
||||
| Gluttton |
|
||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
К сожалению нет под рукою SQL-сервера и я не погу проверить предлагаемое решение...
Суть в следующием: С таблицей Games производить LEFT JOIN вот таких вот подапросов:
Т.е. что то вроде такого:
Это сообщение отредактировал(а) Gluttton - 6.7.2012, 01:20 -------------------- Слава Україні! |
||||
|
|||||
| Gluttton |
|
||||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Решение для Firebird 2.5.
Скрипт для создания БД, таблиц, первиных и вторичных ключей, а так же заполнения тестовыми данными.
Запрос:
Результат.
Но назвать решение изящным язык не аж никак не поварачивается... -------------------- Слава Україні! |
||||||
|
|||||||
| PashaLost |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 18.1.2008 Репутация: нет Всего: нет |
Спасибо Gluttton, потребовалось немного времени, чтобы скореллировать вашу идею на реальный проект бд (не тот что в примере), и оно таки заработало !
|
|||
|
||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Пожалуйста! Это и есть для меня самый большой "+" ;) . -------------------- Слава Україні! |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |