Stillborn
@Stillborn
web-developer, web-designer

Пересечение групп множеств MySQL

Прошу помощи:

Имеется таблица товаров:
| id | caption |
| 1 | first |
| 2 | second |
| 3 | third |

Также имеется таблица параметров, объединенных в наборы
Наборы:
| id | set_name |
| 1 | set1 |
| 2 | set2 |
| 3 | set3 |

Параметры:
| id | set_id | param |
| 1 | 1 | 2014 |
| 2 | 1 | 2013 |
| 3 | 2 | param1 |
| 4 | 2 | param2 |
| 5 | 2 | param3 |
| 6 | 3 | param1_3 |

Ну и собственно таблица связей:
| id_item | id_param |
| 1 | 1 |
| 1 | 3 |
| 2 | 1 |
| 2 | 4 |
| 2 | 5 |
| 3 | 2 |
| 3 | 3 |
| 3 | 6 |

Что есть:
На входе имеется многомерный массив, с вложенными рассортированными по наборам параметрами:
$forSelect = array(
 'set1' => array( '1' , '2' ),
 'set2' => array( '3' , '5' ),
);

Что необходимо:
Сделать выборку товаров, в которых приведено хотя бы одно на каждый набор входящих параметров, т,е. если из 'year' в товаре имеется параметр '1' (2014), то в выборку он попадет только, если в товаре имеется связь с '3', или '5' из второго набора входящих данных

P.S.: Может быть мне стоит перестроить как-то базу для большего удобства, если такая задача будет вызывать сложности?
  • Вопрос задан
  • 5480 просмотров
Решения вопроса 1
breefix
@breefix
Технолог
Как вариант решения «в лоб»:
SELECT *
FROM items
WHERE id in (SELECT id_item
	     FROM items_param
	     WHERE id_param in (1, 2))
  AND id in (SELECT id_item
	     FROM items_param
	     WHERE id_param in (3, 5))


И так по условию для каждого набора из входных данных.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы