Php MySQL-以分层方式连接标签

Php MySQL-以分层方式连接标签,php,mysql,concatenation,temp-tables,hierarchical-trees,Php,Mysql,Concatenation,Temp Tables,Hierarchical Trees,我有一个临时表(这很重要,因为我不能在同一个查询中打开它两次,以创建具有以下结构的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 NUL

我有一个临时表(这很重要,因为我不能在同一个查询中打开它两次,以创建具有以下结构的
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 |
+-----------+--------------+---------------+------------------+-----------------+
我需要什么 我需要获得根据类别连接的
值\u id
,前提是报表包含用户需要的所有类别

因此,在给定的示例中,如果用户说“我想按
category\u 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\u id=3
的值,那么我应该得到它的所有可能的树组合

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

我一直在尝试使用
GROUP\u CONCAT()
具有COUNT(category\u id)
ORDER BY FIELD(category\u id)
,但我无法使其显示所有可能组合的结果,因为我无法使用联接


谢谢大家的帮助和时间

最终,我不认为通过SQL就可以做到这一点,因为(1)您说您不能加入(2)我知道没有其他方法可以让源行中的一行(在您的情况下,值为35)变成结果集中的多行(在您的情况下,为2行)。您最好创建一个新问题,只关注问题的PHP/重新格式化方面。我也这么想,但stackoverflow已经向我展示了很多次,当我认为没有可能的解决方案时,有人会想出更好的方法。我会等一会儿再这样做,但我想我会听从你的建议。感谢您的时间和评论!对我来说,问题在于您使用CSV,而且您使用的是一个临时表(而不是一个带有会话和清理的永久表),最终,我认为这不可能通过SQL实现,因为(1)您说您不能加入,并且(2)我知道没有其他方法可以让源行中的一行(在您的情况下,值=35)变成多于一行(在您的案例中为2行)在结果集中。你最好创建一个新问题,只关注问题的PHP/重新格式化方面。我也这么想,但stackoverflow已经向我展示了很多次,当我认为没有可能的解决方案时,有人会想到更好的方法。在这样做之前,我会稍等片刻,但我认为我会遵循你的建议您的建议。感谢您的时间和评论!对我来说,问题在于您使用CSV,以及您使用的是临时表(而不是带有会话和清理的永久表)