我在mySQL中有一个奇怪的请求。我发现很多方法可以通过添加更多的连接来处理组合对或某个其他数字,但我想知道是否有一种动态的方法可以处理任意数量的组合。
为了解释,如果我有一个表格,它有1列(column_id)和1列(column_text)
Id | Text
--------
1 | A
2 | B
3 | B
4 | B
5 | A
然后通过运行一个名为GetCombinations的过程并带有参数A,应该会得到以下结果:
CombinationId | Combinations
---------------------------
1 | 1
2 | 5
3 | 1,5
运行参数为B的GetCombinations过程应该产生以下结果:
CombinationId | Combinations
---------------------------
1 | 2
2 | 3
3 | 4
4 | 2,3
5 | 2,4
6 | 3,4
7 | 2,3,4
显然,数字越大,我期望结果指数增加。
这样的查询是否可能?我找到的所有结果都使用了Join,并将每个结果的长度限制为Join的数量。
谢谢
更新
我在这里找到了一篇文章here,但组合的最大数量应该很小(最多20个左右)。在我的情况下,如果有100个组合,我计算出查询将产生:9426890448883247745626185743057242473809693764078951663494238777294707070023223798882976159207729119823605850588608460429412647567360000000000000000000099行(笑)
所以我认为我的答案是不可行的。
然而,有没有办法用最多两个组合得到这个结果?
CombinationId | Combinations
---------------------------
1 | 2
2 | 3
3 | 4
4 | 2,3
5 | 2,4
6 | 3,4
我找到了一个使用JOIN获取所有组合的查询,但我不确定如何生成组合ID以及如何获取单个行。
更新2
使用以下方法解决:
SELECT @rownum := @rownum + 1 AS 'CombinationId'
cross join (select @rownum := 0) r
我使用 UNION ALL 进行了查询。