gpt4 book ai didi

mysql - 使用 MySQL 中的位域列将一行分解为多行

转载 作者:可可西里 更新时间:2023-11-01 08:37:21 26 4
gpt4 key购买 nike

我有一个名为 warnings 的位域,存储为一个 int。我想得到每个人的警告列表

假设我们有一张 table

NAME,  WARNINGS
alex, 0
mike, 5
sarah, 2

其中整数的每一位对应一个警告#(位位置)。目前这是在 perl 中使用 for 循环完成的

for(my $i=0; $i < $warning_size;$i++ ){
if( (1 << $i ) & $warning != 0){
print "$name\t" . $i+1 ."\n";
}
}

有什么方法可以让我通过 mysql 查询来处理这个问题。

对于上面的例子,我想要下面的输出:

name, warning
-------------
mike 1
mike 3
sarah 2

我试图将其归结为一个选择语句,

谢谢

最佳答案

试试这个 -

CREATE TABLE warn_bits(
b INT(11) NOT NULL
);

INSERT INTO warn_bits VALUES
(1),
(2),
(3),
(4),
(5),
(6),
(7),
(8);

SELECT w.name, wb.b FROM warnings w
JOIN warn_bits wb
ON ((w.WARNINGS >> wb.b - 1) & 1) > 0
ORDER BY w.name, wb.b;

+-------+---+
| name | b |
+-------+---+
| mike | 1 |
| mike | 3 |
| sarah | 2 |
+-------+---+

您可以扩展 warn_bits 表以支持 INT 或 BIGINT 数字。


编辑2

SELECT w.name, wb.b FROM warnings w
JOIN (
SELECT 1 b UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION
SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8
) wb
ON ((w.WARNINGS >> wb.b - 1) & 1) > 0
ORDER BY w.name, wb.b;

关于mysql - 使用 MySQL 中的位域列将一行分解为多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8521885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com