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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос из трёх таблиц 
:(
    Опции темы
dirol
Дата 11.2.2014, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день.
Помогите организовать запрос на выборку данных из трёх таблиц.
Для простоты все данные в таблицах очень примерные:

Таблица 1. Orders
Код

idorder
nameorder

Таблица 2. Region_in_Orders
Код

id
idorder
idregion

Таблица 3. Regions
Код

idregion
nameregion


Суть:
* В таблице Orders содержатся абстрактные Заказы покупателей.
* Таблица Region_in_Orders является некой таблицей связки между таблицей Orders и справочником регионов (таблица Regions);
* Каждый заказ может быть доставлен в несколько регионов, значит в таблице Region_in_Orders может содержаться несколько записей с одинаковым значением idorder, но с разными значениями idregion;
* Но так как в таблице Region_in_Orders содержатся только идентификаторы регионов, наименование региона нужно получить из таблицы Regions. Допускается, что наименование нескольких регионов придёт в виде одной строки, где названия будут перечислены через запятую.
Т.е. в итоге мы должны получить примерно следующие данные:
Заказ № Orders.Idorder; Наименование: Orders.nameorder; Регионы: Regions.nameregion,Regions.nameregion и т.д.
PM MAIL   Вверх
Akina
Дата 11.2.2014, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



В студию - Create Table всех таблиц, Insert Into данных в таблицы, желаемый результат на именно этих данных.

Цитата(dirol @  11.2.2014,  17:55 Найти цитируемый пост)
Допускается, что наименование нескольких регионов придёт в виде одной строки, где названия будут перечислены через запятую.

Какой [censored] это разрешил?


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

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


Новичок



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

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



Код

CREATE TABLE IF NOT EXISTS `Orders` (
  `idorder` int(9) NOT NULL AUTO_INCREMENT,
  `nameorder` varchar(255) NOT NULL,
  PRIMARY KEY (`idorder`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;


INSERT INTO `Orders` (`idorder`, `nameorder`) VALUES
(1, 'На камчатку'),
(2, 'В сибирь (байкал)');

Код

CREATE TABLE IF NOT EXISTS `regions` (
  `idregion` int(9) NOT NULL AUTO_INCREMENT,
  `nameregion` varchar(255) NOT NULL,
  PRIMARY KEY (`idregion`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;

--
-- Дамп данных таблицы `regions`
--

INSERT INTO `regions` (`idregion`, `nameregion`) VALUES
(6, 'Приморск'),
(5, 'Сахалин'),
(3, 'Петропавлоск-Камчатский'),
(4, 'Чита');


Код

CREATE TABLE IF NOT EXISTS `Region_in_Orders` (
  `id` int(9) NOT NULL AUTO_INCREMENT,
  `idregion` int(9) NOT NULL,
  `idorder` int(9) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;

--
-- Дамп данных таблицы `Region_in_Orders`
--

INSERT INTO `Region_in_Orders` (`id`, `idregion`, `idorder`) VALUES
(1, 3, 1),
(2, 4, 2),
(3, 5, 1);


Результатом запроса должны стать строки таблицы orders, дополненные названием регионов.
Orders.idorder+' '+Orders.nameorder+' '+regions.nameregion,regions.nameregion

Цитата

Какой [censored] это разрешил?

Это как-то влияет на быстродействие?
Или неудобно при разборе?
Спасибо.

Это сообщение отредактировал(а) dirol - 11.2.2014, 21:42
PM MAIL   Вверх
Akina
Дата 11.2.2014, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(dirol @ 11.2.2014,  19:46)
Результатом запроса должны стать строки таблицы orders, дополненные названием регионов.


Между понятиями "результат" и "рассказ, каким он должен быть", есть маленькая разница.

Добавлено через 1 минуту и 1 секунду
Цитата(dirol @ 11.2.2014,  19:46)
Цитата

Какой [censored] это разрешил?

Это как-то влияет на быстродействие?
Или неудобно при разборе?
Спасибо.

Это противоречит понятию "нормализация".


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

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


Новичок



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

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



Цитата

Между понятиями "результат" и "рассказ, каким он должен быть"

Согласен. Извиняюсь.

Код

   idorder   |   nameorder   |   nameregion   |
        1       |   На камчатку |    Петропавлоск-Камчатский, Сахалин   |
        2       |  В сибирь (байкал)   | Чита   |

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


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


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

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



Код

SELECT o.idorder
     , o.nameorder
     , GROUP_CONCAT(r.nameregion ORDER BY ro.id ASC SEPARATOR ', ') nameregion
FROM Orders o
   , Regions r
   , Region_in_Orders ro
WHERE o.idorder = ro.idorder
  AND r.idregion = ro.idregion
GROUP BY o.idorder
--     , o.nameorder
;



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

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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