powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Очень сложный запрос (сложная архитектура БД)
22 сообщений из 22, страница 1 из 1
Очень сложный запрос (сложная архитектура БД)
    #36563493
Имеется БД. БД спроектирована по особому (форм нормализации нет).
Архитектура следующая (все таблицы не пишу):

Продукты:
ID K V
1 Name some_name
1 Category 13123123
1 Description lalalalalalalalallala
1 Producer 2
........................................


Производители:
ID K V
2 Title some_title
2 Info plsdpasldplsad
2 Addr lalalalalalalalallala

Как все догадались поле K - названия свойств объекта, а V - значение свойства.
Допустим, в продукте имеется ссылку на производителя (ID=10, K=Producer, V=2(ID производителя)).
Как сделать выборку, чтобы выбрались данные из 2-х таблиц, но при этом, чтобы формат вывода был [ID, K, V]?
Т.е. на выходе имеем:
ID K V
1 Name some_name
1 Category 13123123
1 Description lalalalalalalalallala
1 Producer some_title (т.е. место ID подставили Title)



Помогите пожалуйста. И как называется такой метод проектирования БД?
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36563550
Неужели никто не знает? =)
Гугл мне помочь не смог ((
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36563577
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищите по словам "Тенцер" и "EAV".
Только у вас несколько извращенная разновидность из-за "K - названия свойств объекта". Обычно названия свойств выносятся в справочник.

Имхо, имеет смысл к применению только в тех случаях, когда требуется сверхгибкость и можно пожертвовать производительностью (а иногда и надежностью).
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36563627
Спасибо громадное. Посмотрю.
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36564953
Вопрос остается актуальным. Научился делать выборку по связям из нескольких таблиц (с помощью union). А как сделать выборку на основе определенного условия (where V='some_value'?). Нужно, чтобы все свойства объекта попадали в ответ. Как то сделать, кто знает, ответьте пожалуйста.
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36565065
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищите лучше. Все обсуждалось много раз, в т.ч. и на этом форуме, в т.ч. и на этом подфоруме.

Чаще всего решение выглядит примерно так:
Код: plaintext
1.
2.
3.
4.
SELECT ID
FROM mytable
WHERE (K,V) IN (('Category','13123123'),('Description','lalalalalalalalallala'))
GROUP BY ID
HAVING COUNT(*)= 2 
P.S. Конструкция IN показана для наглядности. Насколько я помню, в MySQL с несколькими значениями в левой части она не работает.
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36565142
Нет. Такой запрос вернет по одной строке для каждого объекта. Мне же нужно, чтобы запрос возвращал все строки нужного объекта (все свойства), но при определенном условии.
К примеру. Вернуть все продукта, у которых цена больше 100 - запрос. Нужно чтобы вернулсиь все свойства продукта причем в формате ID, K, V.
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36565174
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте соединение (JOIN) вашей таблицы с подзапросом, выдающем нужный набор ID.
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36565233
Да, спасибо, так и сделал.
Но, при связях с другими сущностями (делаю через union, т.к. нужен формат выхода ID K V)
Почему-то не получается сгруппировать и выдать условие по having.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select p_ext.ID, p_ext.K, p_ext.V from LS_Product as p_ext
	join LS_Product as p_q on (p_q.ID = p_ext.ID and p_q.K = 'Number' and p_q.V = '1')
where p_ext.K in ('Description', 'Cost', 'Number')
	union
		select  pr.ID, pr.K, depot.V from LS_Product as pr
			join LS_Depot as depot on depot.ID = pr.V and depot.K = 'Title'
	union
	        select  p.ID, p.K, prod.V from LS_Product as p
			join LS_Producer as prod on prod.ID = p.V and prod.K = 'Title'
group by p_ext.ID, p_ext.K, p_ext.V
	having p_ext.ID = p_q.ID
order by  1 ,  2 
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36565942
Неужели никто не знает? =)
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36565989
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПроизводители:
ID K V
2 Title some_title
2 Info plsdpasldplsad
2 Addr lalalalalalalalallala

Как все догадались поле K - названия свойств объекта, а V - значение свойства.интересно - а как у вас выглядят данные для второго производителя? Покажите пожалуста...
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36566053
Модель EAV.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
ID      K         V
 2       Title      some_title
 2       Info      plsdpasldplsad
 2       Addr      lalalalalalalalallala
 3       Title      some_title131
 3       Info      plsdpasldplsad21wqr
 3       Addr      lalalalalalalalallalawqrwqrwq
 4       Title      some_title14
 4       Info      plsdpasldplsadwqrw
 4       Addr      lalalalalalalalallalawqrwqr
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36566072
Изменю вопрос.
Как мне условие where (либо having) применить для всех подзапросов (union включая)?


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select p_ext.ID, p_ext.K, p_ext.V from LS_Product as p_ext
	join LS_Product as p_q on (p_q.ID = p_ext.ID and p_q.K = 'Number' and p_q.V = '1')
where p_ext.K in ('Description', 'Cost', 'Number')
	union
		select  pr.ID, pr.K, depot.V from LS_Product as pr
			join LS_Depot as depot on depot.ID = pr.V and depot.K = 'Title'
	union
	        select  p.ID, p.K, prod.V from LS_Product as p
			join LS_Producer as prod on prod.ID = p.V and prod.K = 'Title'
group by p_ext.ID, p_ext.K, p_ext.V
	having p_ext.ID = p_q.ID
order by  1 ,  2 

...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36566130
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никакой MySQL-специфики в теме не вижу, так что, пожалуй, топик перенесу.

Модератор: Тема перенесена из форума "MySQL".
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36566138
А тему куда перенесли?
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36566140
Спецификация MySQl налицо. Мне нужно именно для MySql запрос.
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36566174
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извините догадался
как-то так
Код: plaintext
1.
2.
3.
4.
select t.ID , 
       t.K, 
       IF(t.K<>'Producer', t.V, SELECT p.V 
                                       from PROIZV as p WHERE p.ID=t.V AND p.K='Title') 
from product as t 
метод "хранения" данных называется -"файл для передачи данных в ГНИ или ПФР в текстовом виде" :-)
все нужно переводить в "горизонтальный" вид
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36566193
в том то и дело, что мне нужны данные в вертикальном формате =) (поля ID, K, V)
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36566264
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaratCrashCrashCrashв том то и дело, что мне нужны данные в вертикальном формате =) (поля ID, K, V)я вам показал запрос, который выведет "вертикальный" формат
ID K V1 Name some_name1 Category 131231231 Description lalalalalalalalallala1 Producer some_title (т.е. место ID подставили Title)
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36566431
Ага, а как применить несколько условий к V?
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36567237
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какие условия вам еще надо ???
...
Рейтинг: 0 / 0
Очень сложный запрос (сложная архитектура БД)
    #36567690
Alex_Ustinov,

Вы до конца не поняли суть запроса. Нужно чтобы выбирались все свойства объектов, определяющих определенному условию (к примеру, когда K = 'Name' и V = 'Crash' - это только одно услвоие, а может быть сколько угодно).
Запрос я сделал.
Нужно было просто сгурппировать записи и в having сделать проверку на ID, которые получаем из подзапросов в having. Все просто оказалось =)
Всем спасибо.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Очень сложный запрос (сложная архитектура БД)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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