1

我有一个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_id1、2 和 3 的报告”,我需要显示以下内容:

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

如您所见,ID 为 1 的报告没有类别 1,它必须从结果集中隐藏,而 ID 为 2 的报告有两个类别 2 的值,它必须显示两个结果,每个组合树一个.

如果它有三个值category_id = 3,那么我应该得到它的所有可能的树组合。

我也在使用 PHP,因此解析数据并使用它的解决方案也可能是正确的。

我一直在尝试使用GROUP_CONCAT(),HAVING COUNT(category_id)ORDER BY FIELD(category_id),但由于无法使用 JOIN,我无法让它出现在每种可能的组合中。

感谢大家的帮助和时间!

4

0 回答 0