我在mySQL中有一个奇怪的请求。通过添加更多联接,我找到了很多方法来为成对组合或某个其他数字执行此操作,但我想知道是否有动态方法为任意数量的组合执行此操作。
解释我是否有一个表有1列(column_id)和(column_text)
Id | Text
--------
1 | A
2 | B
3 | B
4 | B
5 | A
然后通过运行带参数A的过程GetCombinations应该产生:
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
显然数字越大,我预计结果会呈指数增长。
这样的查询是否可能?我只能找到使用连接的结果,将每个结果的长度限制为连接数。
谢谢
我找到了一篇文章here,但组合的最大数量应该很小(最多20个左右)。在我的情况下有100个组合我计算它会产生:9426890448883247745626185743057242473809693764078951663494238777294707070023223798882976159207729119823605850588608460429412647567360000000000000000000099行(lol)
所以我将我的答案归类为不可行
然而,是否有办法以最多2个组合获得此结果?
CombinationId | Combinations
---------------------------
1 | 2
2 | 3
3 | 4
4 | 2,3
5 | 2,4
6 | 3,4
我找到了一个使用JOIN获取所有组合的查询,但我不知道如何生成组合ID以及如何获取各行。
使用
解决它SELECT @rownum := @rownum + 1 AS 'CombinationId'
cross join (select @rownum := 0) r
我用UNION ALL
进行查询答案 0 :(得分:1)
您要做的是使用字段Text == <parameter>
生成所有元素集的Power Set。正如您已经发现的那样,这个数字随着输入数组的长度呈指数增长。
如果你能用其他语言解决它(比如说php),请看看: