我有一个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 |
+------------+-----------+--------------+
如您所见,ID 为 1 的报告没有类别 1,它必须从结果集中隐藏,而 ID 为 2 的报告有两个类别 2 的值,它必须显示两个结果,每个组合树一个.
如果它有三个值category_id = 3
,那么我应该得到它的所有可能的树组合。
我也在使用 PHP,因此解析数据并使用它的解决方案也可能是正确的。
我一直在尝试使用GROUP_CONCAT()
,HAVING COUNT(category_id)
和ORDER BY FIELD(category_id)
,但由于无法使用 JOIN,我无法让它出现在每种可能的组合中。
感谢大家的帮助和时间!