mySQL获取某些行的所有可能组合

Nic*_*ick 5 mysql sql combinations

我在mySQL中有一个奇怪的请求.我发现通过添加更多联接,可以通过多种方式为组合或一些其他数字执行此操作,但我想知道是否有动态方法可以为任意数量的组合执行此操作.

解释我是否有一个表有1列(column_id)和(column_text)

Id | Text
--------
1  | A
2  | B
3  | B
4  | B
5  | A
Run Code Online (Sandbox Code Playgroud)

然后通过运行带参数A的过程GetCombinations应该产生:

CombinationId | Combinations
---------------------------
1             |      1
2             |      5
3             |      1,5
Run Code Online (Sandbox Code Playgroud)

通过运行带参数B的过程GetCombinations应该产生:

CombinationId | Combinations
---------------------------
1             |      2
2             |      3
3             |      4
4             |      2,3
5             |      2,4
6             |      3,4
7             |      2,3,4
Run Code Online (Sandbox Code Playgroud)

显然数字越大,我预计结果会呈指数增长.

这样的查询是否可能?我只能找到使用连接的结果,将每个结果的长度限制为连接数.

谢谢

UPDATE

我在这里找到了一篇文章,但组合的最大数量应该很小(最多20个左右).在我的情况与100组合,我估计它会产生:9426890448883247745626185743057242473809693764078951663494238777294707070023223798882976159207729119823605850588608460429412647567360000000000000000000099行(笑)

所以我将我的答案归类为不可行

但是有没有办法用最多2个组合得到这个结果?

CombinationId | Combinations
---------------------------
1             |      2
2             |      3
3             |      4
4             |      2,3
5             |      2,4
6             |      3,4
Run Code Online (Sandbox Code Playgroud)

我找到了一个查询来获取使用JOIN的所有组合,但我不知道如何生成组合ID以及如何获取单个行.

更新2

用它来解决它

SELECT @rownum := @rownum + 1 AS 'CombinationId'
cross join (select @rownum := 0) r
Run Code Online (Sandbox Code Playgroud)

我用UNION ALL做了查询

Ber*_*Siu 1

您想要做的是生成包含 field 的所有元素的集合的幂集Text == <parameter>。正如您已经发现的,这个数字随着输入数组的长度呈指数增长。

如果您可以用其他语言(例如 php)解决它,请看一下:

在 PHP 中查找数组的子集