У меня есть временный (это важно, так как я не могу открыть его дважды по одному и тому же запросу, чтобы сделать 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.
Спасибо всем за вашу помощь и ваше время!
Задача ещё не решена.
Других решений пока нет …