powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Условие для выбора без использования join
4 сообщений из 4, страница 1 из 1
Условие для выбора без использования join
    #38810969
korinf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица с баннерами.
banner
bannerIdname1banner12banner2

У баннеров есть свойства.
property
propertyIdname1Цвет2Группа


У каждого свойства есть список вариантов.
property_variant
variantIdpropertyIdvalue11синий21красный31зеленый42группа152группа262группа3

При заполнении баннеров ставиться галочка напротив варианта значения свойства. То есть у баннера может быть или не быть какой то ОДИН вариант ОДНОГО свойства.
property_variant_relations
relationsIdbannerIdvariantId111214322424

Запрос на получение всего что есть:
Код: plsql
1.
2.
3.
4.
5.
SELECT banner.*, property . * , property_variant . *, property_variant_relations.*
FROM banner 
LEFT JOIN property_variant_relations ON property_variant_relations.bannerId = banner.bannerId 
LEFT JOIN property_variant ON property_variant.variantId = property_variant_relations.variantId 
LEFT JOIN property ON property_variant.propertyId = property.propertyId 



Вернет нам все что есть. Но самое главное для меня это:
bannerIdpropnameprop_variant_name1Цветсиний1Группагруппа12Цветкрасный2Группагруппа1


Возможно ли как то поставить условие для того чтобы были выбраны одновременно `Цвет` = синий и `Группа` = группа1? То есть необходимо найти баннеры у которых свойство `Цвет` = синий и `группа` = группа1

На выходе получить
bannerIdpropnameprop_variant_name1Цветсиний1Группагруппа1
ВАЖНО!!! Можно ли както получить такой результат без применения JOIN для каждого свойства отдельно? Чтобы в случае когда будет 50 свойств не пришлось делать 50 JOIN



ДАМП

Код: plsql
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.
CREATE TABLE `banner` (
  `bannerId` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id баннера',
  `name` varchar(255) DEFAULT NULL COMMENT 'Название баннера',
  PRIMARY KEY (`bannerId`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='Таблица для хранения баннеров' AUTO_INCREMENT=1;

CREATE TABLE `property` (
  `propertyId` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`propertyId`),
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `property_variant` (
  `variantId` int(11) NOT NULL AUTO_INCREMENT,
  `propertyId` int(11) NOT NULL,
  `value` varchar(255) NOT NULL,
  PRIMARY KEY (`variantId`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


CREATE TABLE `property_variant_relations` (
  `relationsId` int(11) NOT NULL AUTO_INCREMENT,
  `bannerId` int(11) NOT NULL,
  `variantId` int(11) NOT NULL,
  PRIMARY KEY (`relationsId`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

...
Рейтинг: 0 / 0
Условие для выбора без использования join
    #38810977
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
SELECT bannerId
FROM (tableset)
GROUP BY bannerId
HAVING SUM((propname,prop_variant_name) IN (('Цвет','синий'),('Группа','группа1'))) = 2
...
Рейтинг: 0 / 0
Условие для выбора без использования join
    #38810990
korinf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторGROUP BY bannerId
HAVING SUM((propname,prop_variant_name) IN (('Цвет','синий'),('Группа','группа1'))) = 2


Если сделать
HAVING SUM((propname,prop_variant_name) IN (('Цвет','красный'),('Группа','группа1'))) = 2

То запрос тоже сработает
...
Рейтинг: 0 / 0
Условие для выбора без использования join
    #38810999
korinf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

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


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