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)
显然数字越大,我预计结果会呈指数增长.
这样的查询是否可能?我只能找到使用连接的结果,将每个结果的长度限制为连接数.
谢谢
我在这里找到了一篇文章,但组合的最大数量应该很小(最多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以及如何获取单个行.
用它来解决它
SELECT @rownum := @rownum + 1 AS 'CombinationId'
cross join (select @rownum := 0) r
Run Code Online (Sandbox Code Playgroud)
我用UNION ALL做了查询
您想要做的是生成包含 field 的所有元素的集合的幂集Text == <parameter>。正如您已经发现的,这个数字随着输入数组的长度呈指数增长。
如果您可以用其他语言(例如 php)解决它,请看一下: