Как исходя из нее можно выполнить запрос по такой логике?
1. Выбрать products->name, где properties->uid равно нескольким значениям (properties->uid=»value1″, а также properties->uid=»value2″ )
2. Выбрать все уникальные section->uid=”XXX” —> properties->name, для имеющихся products->uid —> properties->uid=»value1″
Заранее благодарю за помощь.
———- Добавлено 29.04.2020 в 22:35 ———-
Никто ниче никак?
Дикий пионер
1. select producs.name from products inner join product_feature on products.uuid = product_feature.product_uid
inner join properties on product_feature.properties.uuid = properties.uid
where (properties.uid = «value1» OR properties.uid = «value2»)
2. не понял вопроса, поясните на примере.
Картинка, кстати, не грузится с первого раза: https://image.prntscr.com/image/EkcOJ9QYQ9yssaND0HSLzA.png вот ссылка
Varenik
В вашем запросе нужно чтобы било не ИЛИ а И.
Если нужно, могу скинуть дамп БД
———- Добавлено 30.04.2020 в 17:15 ———-
По факту есть рабочий запрос, вида:
select distinct p.name from products p inner join product_feature prf on p.uid = prf.product_uid inner join properties pr on prf.properties_uid = pr.uid where pr.uid = 'UID-0000-111'
и
select distinct p.name from products p inner join product_feature prf on p.uid = prf.product_uid inner join properties pr on prf.properties_uid = pr.uid where pr.uid = 'UID-0000-222'
По факту нужно их просто объединить, чтобы выполнялся поиск при условии что pr.uid =’UID-0000-111′ И pr.uid =’UID-0000-222′
Sitealert
Varenik: при условии что pr.uid =’UID-0000-111′ И pr.uid =’UID-0000-222′
А чё, так можно? 🤪
Дикий пионер
Varenik: По факту нужно их просто объединить, чтобы выполнялся поиск при условии что pr.uid =’UID-0000-111′ И pr.uid =’UID-0000-222′
Тогда два раза джойнить через алиасы
Sitealert
Можно ещё вложенным запросом, если я правильно понял ТС, но это тормоз будет жуткий. Джойном однозначно будет быстрее. Или скриптом разбирать простую выборку.
ivan-lev
inner join properties pr on prf.properties_uid = pr.uid where pr.uid = ‘UID-0000-222’
Зачем JOIN-ить лишнюю таблицу по полю, и потом его проверять в «соседней» таблице?
Sitealert: Можно ещё вложенным запросом, если я правильно понял ТС, но это тормоз будет жуткий
По идее, при наличии индекса по uid быстрее может оказаться вложенный запрос вроде такого:
SELECT products.name FROM products WHERE uid IN (SELECT product_uid FROM product_feature pf WHERE pf.uid='value1') AND uid IN (SELECT product_uid FROM product_feature pf WHERE pf.uid='value2') AND
Или ещё интереснее — вложенным сделать 2 INNER JOIN pf по uid..
Varenik
По идее, при наличии индекса по uid быстрее может оказаться вложенный запрос вроде такого:
Varenik
Доброго времени суток.
Есть вот такая структура БД:
Как исходя из нее можно выполнить запрос по такой логике?
1. Выбрать products->name, где properties->uid равно нескольким значениям (properties->uid=»value1″, а также properties->uid=»value2″ )
2. Выбрать все уникальные section->uid=”XXX” —> properties->name, для имеющихся products->uid —> properties->uid=»value1″
Заранее благодарю за помощь.
———- Добавлено 29.04.2020 в 22:35 ———-
Никто ниче никак?
Дикий пионер
1. select producs.name from products inner join product_feature on products.uuid = product_feature.product_uid
inner join properties on product_feature.properties.uuid = properties.uid
where (properties.uid = «value1» OR properties.uid = «value2»)
2. не понял вопроса, поясните на примере.
Картинка, кстати, не грузится с первого раза: https://image.prntscr.com/image/EkcOJ9QYQ9yssaND0HSLzA.png вот ссылка
Varenik
В вашем запросе нужно чтобы било не ИЛИ а И.
Если нужно, могу скинуть дамп БД
———- Добавлено 30.04.2020 в 17:15 ———-
По факту есть рабочий запрос, вида:
и
По факту нужно их просто объединить, чтобы выполнялся поиск при условии что pr.uid =’UID-0000-111′ И pr.uid =’UID-0000-222′
Sitealert
при условии что pr.uid =’UID-0000-111′ И pr.uid =’UID-0000-222′
А чё, так можно? 🤪
Дикий пионер
По факту нужно их просто объединить, чтобы выполнялся поиск при условии что pr.uid =’UID-0000-111′ И pr.uid =’UID-0000-222′
Тогда два раза джойнить через алиасы
Sitealert
Можно ещё вложенным запросом, если я правильно понял ТС, но это тормоз будет жуткий. Джойном однозначно будет быстрее. Или скриптом разбирать простую выборку.
ivan-lev
where pr.uid = ‘UID-0000-222’
Зачем JOIN-ить лишнюю таблицу по полю, и потом его проверять в «соседней» таблице?
Можно ещё вложенным запросом, если я правильно понял ТС, но это тормоз будет жуткий
По идее, при наличии индекса по uid быстрее может оказаться вложенный запрос вроде такого:
Или ещё интереснее — вложенным сделать 2 INNER JOIN pf по uid..
Varenik
Спасибо. Навело на мысли… Буду пробовать