|
Модераторы: skyboy |
|
SkyHawk |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 164 Регистрация: 17.8.2006 Где: г. Новосибирск Репутация: нет Всего: 2 |
Ребята, помогите!
В mySQL имеются три таблицы. В первой - сущности с основными полями (ID заявки, автор, ответственный, дата создания заявки, и т.д.). ID author responsible date ----------------------------------------------------- 1 Иванов Петров 11.02.2016 2 Сидоров Тарасенко 05.11.2015 3 Васильев Петров 17.02.2015 Во второй - названия динамических полей (например, цвет текста, цвет фона, длина, ширина). ID property comment ----------------------------------------- 8 bg-color Цвет фона 9 text-color Цвет текста 10 width Длина 11 heigth Ширина В третьей - значения этих самых полей для каждой сущности, у каждой сущности из первой таблицы - то есть у каждой заявки - могут быть различное количество и различные значения этих полей. ID ticket-ID prop-ID value ------------------------------------------- 1 2 11 3 2 1 8 #ff0000 3 3 8 #caf8ee 4 1 10 4 Так вот, задача - запросом свести воедино, в одну таблицу, статические (из первой таблицы) и динамические (из второй и третьей таблиц) названия и значения полей. ID Автор Ответственный Дата Длина Ширина Цвет текста Цвет фона ------------------------------------------------------------------------------------------------------------------ 1 Иванов Петров 11.02.2016 4 #ff0000 2 Сидоров Тарасенко 05.11.2015 3 3 Васильев Петров 17.02.2015 #caf8ee Надеюсь, понятно объяснил. Никак не могу сообразить, как это реализовать одним запросом. Прошу сильно не пинать, в SQL я не гуру. Это сообщение отредактировал(а) SkyHawk - 15.2.2016, 12:51 --------------------
Быть может все, что может быть, И даже то, что быть не может. |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 453 |
Либо построить статический текст запроса, учитывающий ВСЕ возможные типы "динамических полей" (на самом деле - необязательных атрибутов), либо строить текст такого запроса динамически.
Выходом мог бы быть перекрёстный запрос, но в MySQL они не реализованы. Впрочем, непонятно, что это за задача такая - "свести воедино". Ну, допустим, свёл - дальше что? показать на экране? использовать как источник данных другого запроса? что-то ещё? Это не задача, а первый этап решения какой-то задачи, тут не озвученной. И не факт, что путь решения той самой неозвученной задачи выбран правильно. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
SkyHawk |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 164 Регистрация: 17.8.2006 Где: г. Новосибирск Репутация: нет Всего: 2 |
Akina, всё правильно, это часть другой задачи, цель этой подзадачи - создать источник данных для формирования отчёта по заявкам - xls-таблица, которая будет формироваться именно в указанном выше виде (см. результирующая таблица). Реализовать надо именно через mySQL, без PHP, js, и т.д., потому что использоваться будет в BI-системе, в которой источники данных формируются визуально из существующих таблиц (и при формировании отображается SQL-запрос, который будет выполняться).
--------------------
Быть может все, что может быть, И даже то, что быть не может. |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 453 |
Ну а я что говорю? так себе путь решения выбран...
Выгружай данные в Excel в том виде, в каком они присутствуют в таблицах, собрав в одну плоскую таблицу, на приведённых данных это будет ID author responsible date property value ----------------------------------------------------- 1 Иванов Петров 11.02.2016 Длина 4 1 Иванов Петров 11.02.2016 Цвет фона #ff0000 2 Сидоров Тарасенко 05.11.2015 Ширина 3 3 Васильев Петров 17.02.2015 Цвет фона #caf8ee А потом уже средствами Excel строй требуемый ПЕРЕКРЁСТНЫЙ отчёт. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
SkyHawk |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 164 Регистрация: 17.8.2006 Где: г. Новосибирск Репутация: нет Всего: 2 |
Akina, спасибо! Буду думать...
--------------------
Быть может все, что может быть, И даже то, что быть не может. |
|||
|
||||
SkyHawk |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 164 Регистрация: 17.8.2006 Где: г. Новосибирск Репутация: нет Всего: 2 |
Дабы не задействовать клиентскую сторону (.xls), решил вопрос вот как: так как виды полей - поля в таблице хоть и динамические, но имеющие конкретные ID-шники, которые меняться не будут, создал запрос с несколькими LEFT JOIN, и с выборкой по конкретным ID-шникам.
Костыль блин, кривоватый костыль, но проблема решилась. Это сообщение отредактировал(а) SkyHawk - 15.2.2016, 14:48 --------------------
Быть может все, что может быть, И даже то, что быть не может. |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 453 |
Обязательно наложи на EAV-таблицу требование уникальности пары (ticket-ID,prop-ID), а то будет тебе щастье с таким костылём...
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
SkyHawk |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 164 Регистрация: 17.8.2006 Где: г. Новосибирск Репутация: нет Всего: 2 |
Akina, увы, непосредственно мне данная таблица доступна лишь на чтение... :(
--------------------
Быть может все, что может быть, И даже то, что быть не может. |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 453 |
Тогда замени vX.field_value на, скажем, MAX(vX.field_value). На случай дублирования записей, чтобы не получать вместо одной итоговой строки пачку.
Добавлено через 1 минуту и 16 секунд Хотя нет, не пачку... а случайное значение из всех, какие есть для заданного условия. Но это ничем не лучше. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
SkyHawk |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 164 Регистрация: 17.8.2006 Где: г. Новосибирск Репутация: нет Всего: 2 |
Akina, хорошо, попробую. О результатах сообщу.
Спасибо! --------------------
Быть может все, что может быть, И даже то, что быть не может. |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 453 |
SkyHawk, с другой стороны - структуру этой таблицы ты же получить можешь? вот и посмотри, может, там уже есть требуемый уникальный индекс, и не надо копья ломать...
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
SkyHawk |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 164 Регистрация: 17.8.2006 Где: г. Новосибирск Репутация: нет Всего: 2 |
Akina, да, посмотрел, есть уникальный индекс, из двух полей!
Так что всё отлично! --------------------
Быть может все, что может быть, И даже то, что быть не может. |
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |