MySQL排列

MySQL排列,第1张

MySQL排列

每个附加项都可以包含在捆绑包中,也可以不在捆绑包中,从而成为二进制属性。
可视化组合的一种方法是为每个多余项创建一个单词,

1
表示多余项在列表中,
0
表示不是。
例如
Bench + undershelf + overshelf
为110(如果二进制字符串以相反的顺序读取,则为011)

生成n位的每个组合都会给n个额外的组合,也会给从

0
到的每个数字
2^n - 1

我们可以从这里开始工作:
1.生成

0
到的数字列表
2^n - 1

2.将数字转换为二进制,以列出附加项的组合
。3.将每个位与附加项匹配
。4.在捆绑包说明中串联附加项的名称。

SELECt CONCAt(b.Name , COALESCE(CONCAt(' + '      , GROUP_CONCAt(x.Name SEPARATOR ' + '))          , '')) CombinationFROM   (SELECt p.Name, p.id          , LPAd(BIn(u.N + t.N * 10), e.Dim, '0') bitmap     FROM   Products p CROSS JOIN (SELECt 0 N UNIOn ALL SELECT 1    UNIOn ALL SELECT 2 UNIOn ALL SELECT 3 UNIOn ALL SELECT 4   UNIOn ALL SELECT 5 UNIOn ALL SELECT 6 UNIOn ALL SELECT 7   UNIOn ALL SELECT 8 UNIOn ALL SELECT 9) u CROSS JOIN (SELECT 0 N UNIOn ALL SELECT 1    UNIOn ALL SELECT 2 UNIOn ALL SELECT 3 UNIOn ALL SELECT 4   UNIOn ALL SELECT 5 UNIOn ALL SELECT 6 UNIOn ALL SELECT 7   UNIOn ALL SELECT 8 UNIOn ALL SELECT 9) t INNER JOIN (SELECT COUNT(1) Dim      , `Parent ID` pID  FROM Extra) **E** ON e.pID = p.ID     WHERe  u.N + t.N * 10 < Pow(2, e.Dim)       ) **B**       LEFT  JOIN (SELECt @rownum := @rownum + 1 ID  , `Parent ID` pID  , Name        FROM   Extra  , (Select @rownum := 0) r) **X**    ON x.pID = b.ID   AND SUBSTRINg(b.bitmap, x.ID, 1) = '1'GROUP BY b.Name, b.bitmap

此查询最多可以使用六个附加功能,然后需要另一个数字表(三个附加功能一个数字)。

怎么运行的

子查询

E
计算附加项的数量,用于
C
将数字表
u
t
(单位和十进制)生成的元素限制为2 ^ dim。

该数字将通过转换为二进制

BIn(u.N + t.N * 10)
,然后在元素数上保留“ 0”,从而生成一个组合位图

要使用生成的位图,每个附加项都需要一个伪造的ID,该ID将与其中的位置匹配,这就是子查询

X
的目的。

这两个子查询

JOIN
由位图的第n个char进行编辑:如果char为1,则捆绑包中包含多余的字符,将其合并
LEFT
以不松散没有多余的产品。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5675578.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存