MySQL — Получение тегов, сцепленных иерархическим способом

У меня есть временный (это важно, так как я не могу открыть его дважды по одному и тому же запросу, чтобы сделать JOIN) таблица со следующей структурой:

CREATE TEMPORARY TABLE `temp_report_tags` (
`report_id` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
`report_title` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
`attr_value_id` bigint(20) NOT NULL,
`attr_category_id` bigint(20) NOT NULL,
`attribute_count` bigint(21) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

С некоторыми примерами данных:

+-----------+--------------+---------------+------------------+-----------------+
| report_id | report_title | attr_value_id | attr_category_id | attribute_count |
+-----------+--------------+---------------+------------------+-----------------+
|         1 | SEN vs PUR   |            16 |                2 |               3 |
|         1 | SEN vs PUR   |            34 |                3 |              43 |
|         2 | PRA vs TLS   |            35 |                1 |              48 |
|         2 | PRA vs TLS   |            36 |                2 |              51 |
|         2 | PRA vs TLS   |            37 |                2 |               4 |
|         2 | PRA vs TLS   |            51 |                3 |               5 |
+-----------+--------------+---------------+------------------+-----------------+

Что мне нужно

Мне нужно получить value_id объединяются по категориям, только если в отчете есть все необходимые категории, которые хочет пользователь.

Итак, в приведенном примере, если пользователь говорит «Я хочу видеть отчеты category_id 1, 2 и 3 «, Мне нужно показать следующее:

+------------+-----------+--------------+
| value_tree | report_id | report_title |
+------------+-----------+--------------+
| 35,36,51   |         2 | PRA vs TLS   |
| 35,37,51   |         2 | PRA vs TLS   |
+------------+-----------+--------------+

Как видите, поскольку отчет с идентификатором 1 не имеет категории 1, он должен быть скрыт от набора результатов, а так как отчет с идентификатором 2 имеет два значения для категории 2, он должен отображать два результата, по одному для каждого дерева комбинаций. ,

Если бы он имел три значения для category_id = 3тогда я должен получить все возможные комбинации для этого дерева.

Я тоже использую PHP, так что решение с анализом данных и работой с ним также может быть правильным.

Я пытался работать с GROUP_CONCAT(), HAVING COUNT(category_id) а также ORDER BY FIELD(category_id), но я не смог сделать так, чтобы он отображался как результат для каждой возможной комбинации, так как я не могу использовать JOIN.

Спасибо всем за вашу помощь и ваше время!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]