powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом - Развернуть строки в столбцы
3 сообщений из 3, страница 1 из 1
Помогите с запросом - Развернуть строки в столбцы
    #39040358
atrian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Помогите найти решение для задачи, нужно сделать горизонтальное представление определенных свойств заявок из базы данных.

Есть таблица с заявками:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
--
-- Структура таблицы `Requests`
--

CREATE TABLE IF NOT EXISTS `Requests` (
  `r_id` int(11) NOT NULL AUTO_INCREMENT,
  `u_id` int(11) NOT NULL,
  `c_id` int(11) NOT NULL,
  `sent` int(11) NOT NULL,
  `type` int(11) NOT NULL DEFAULT '1',
  `rdate` int(11) NOT NULL,
  PRIMARY KEY (`r_id`),
  KEY `sent` (`sent`),
  KEY `u_id` (`u_id`),
  KEY `c_id` (`c_id`),
  KEY `type` (`type`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1090 ;

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

INSERT INTO `Requests` (`r_id`, `u_id`, `c_id`, `sent`, `type`, `rdate`) VALUES
(1, 8, 5, 7, 6, 1422431858),
(2, 9, 16, 7, 5, 1422433663),
(3, 8, 13, 7, 1, 1422437183),
(4, 8, 19, 7, 6, 1422444874),
(5, 9, 2, 7, 1, 1424856319),
(6, 9, 2, 4, 1, 1422447903),
(7, 9, 2, 7, 1, 1422448128),
(8, 8, 19, 7, 1, 1422454243),
(9, 9, 2, 4, 1, 1422522407),
(10, 1, 1, 1, 7, 1426658124);



Есть таблица связей:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
--
-- Структура таблицы `ROlink`
--

CREATE TABLE IF NOT EXISTS `ROlink` (
  `link_id` int(11) NOT NULL AUTO_INCREMENT,
  `r_id` int(11) NOT NULL,
  `op_id` int(11) NOT NULL,
  PRIMARY KEY (`link_id`),
  KEY `op_id` (`op_id`),
  KEY `r_id` (`r_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=15111 ;

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

INSERT INTO `ROlink` (`link_id`, `r_id`, `op_id`) VALUES
(1, 1, 1),
(2, 1, 2),
(3, 1, 3),
(4, 1, 4),
(5, 1, 5),
(6, 1, 6),
(7, 1, 7),
(8, 1, 8),
(9, 2, 9),
(10, 2, 10);



Таблица опций заявок:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
CREATE TABLE IF NOT EXISTS `ROptions` (
  `op_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(80) NOT NULL,
  `cyr_name` int(80) DEFAULT NULL,
  `type` int(11) NOT NULL DEFAULT '1',
  `container` text,
  PRIMARY KEY (`op_id`),
  KEY `name` (`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=15105 ;

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

INSERT INTO `ROptions` (`op_id`, `name`, `cyr_name`, `type`, `container`) VALUES
(1, 'data-vypolneniya', 0, 5, '1422478800'),
(2, 'tovary', 0, 3, 'a:1:{i:0;a:3:{s:4:"name";s:34:"пока не установлен";s:1:"q";s:1:"3";s:7:"comment";s:115:"на фото установленный тип оборудования определить не удалось. ";}}'),
(3, 'kontaktnoe-lico', 0, 1, 'Ольга'),
(4, 'sotovyy-telefon', 0, 1, '8 NNN NNN NN NN'),
(5, 'gorodskoy-telefon', 0, 1, ''),
(6, 'vremya', 0, 6, '1422517740'),
(7, 'adres', 0, 4, 'a:4:{s:4:"city";s:12:"Москва";s:6:"street";s:18:"ННННННННН";s:8:"building";s:1:"3";s:4:"full";s:43:"г. Москва, Н. ННННННННН, 3";}'),
(8, 'kommentariy-k-zayavke', 0, 2, 'текст комментария.'),
(9, 'data-vypolneniya', 0, 5, '1422392400'),
(10, 'tovary', 0, 3, 'a:1:{i:0;a:3:{s:4:"name";s:18:"документы";s:1:"q";s:0:"";s:7:"comment";s:0:"";}}');



На выходе нужно получить столбцы:
r_id,
u_id,
c_id,
sent,
type,
rdate,
связанную с заявкой опцию из ROptions где name = data-vypolneniya,
связанную с заявкой опцию из ROptions где name = adres,
связанную с заявкой опцию из ROptions где name = kommentariy-k-zayavke

Опции добавляются со временем, и в будущем наверняка потребуется расширять горизонтальное представление
Помогите составить запрос...

У меня получается только через JOIN подцепить только одну какую то определенную опцию, а надо несколько

Код: sql
1.
2.
3.
4.
SELECT *
FROM Requests
LEFT JOIN ROlink ON (ROlink.r_id = Requests.r_id)
JOIN ROptions AS ROpt_City ON (ROlink.op_id = ROpt_City.op_id AND ROpt_City.name = 'adres')
...
Рейтинг: 0 / 0
Помогите с запросом - Развернуть строки в столбцы
    #39040382
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
atrianУ меня получается только через JOIN подцепить только одну какую то определенную опцию, а надо несколькоНу так несколько и подцепляйте. Использовать алиасы для таблиц, как вижу, уже умеете. Алиасы, разумеется, должны быть разные.
...
Рейтинг: 0 / 0
Помогите с запросом - Развернуть строки в столбцы
    #39040589
atrian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftНу так несколько и подцепляйте. Использовать алиасы для таблиц, как вижу, уже умеете. Алиасы, разумеется, должны быть разные.

Спасибо!
Получается что каждый раз надо цеплять ROlink под другим алиасом и потом на него цеплять опции по выборке, я правильно всё понял?

Проверил запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT Requests.r_id, Requests.u_id, Requests.c_id, Requests.sent, Requests.type, Requests.rdate, ROpt_City.container as city, ROpt_date.container as actionDate
FROM Requests

LEFT JOIN ROlink ON (ROlink.r_id = Requests.r_id)
JOIN ROptions AS ROpt_City ON (ROlink.op_id = ROpt_City.op_id AND ROpt_City.name = 'adres')

LEFT JOIN ROlink as ROlink2 ON (ROlink2.r_id = Requests.r_id)
JOIN ROptions AS ROpt_date ON (ROlink2.op_id = ROpt_date.op_id AND ROpt_date.name = 'data-vypolneniya')


Все работает. Смущает только несколько джоинов ROlink...
Вообще, это более менее оптимальный путь решения такой задачи?
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом - Развернуть строки в столбцы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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