gpt4 book ai didi

MYSQL 分组查询

转载 作者:行者123 更新时间:2023-11-29 14:53:21 25 4
gpt4 key购买 nike

我有一个表,其中包含 512 个条目(最初,​​该条目会随着我们添加的记录而增加)。该表有列:

  • id(id 是自动递增且主要的)
  • ip_address
  • in_use(in_use 为 bool 值,true/false)

基本上我有一个地址列表(就像我最初所说的,它有 512)

我需要要求 mysql 返回未使用的行,但按设定的数字将它们分组在一起(即我需要 11 个空闲地址),

但是,该系统将在 in_use 列上将行标记为 false,紧邻其他标记为 true 的行。

我需要一种方法来获取一定数量的 IP,ID 会按顺序被破坏......示例

ids => in_use
--------------
1 => false
2 => false
3 => false
4 => false
5 => false
6 => false
7 => false
8 => false
9 => true
10 => true
11 => false
12 => false
13 => false
14 => false
15 => false
16 => false
17 => false
18 => false
19 => false
20 => false
21 => false
22 => false
23 => false

现在,如果我查询最接近顶部的 11 个免费地址,它将返回 id 1 到 12 的列表,跳过 9,这对我想要做的事情不起作用:(

我希望它做的是意识到 9 正在使用中,因此无法使用它,因此无法创建一个连续组并从 11 到 22 中选择...因为这是下一个可用的连续组。

有什么方法可以为此构建查询吗?

最佳答案

供讨论的示例表

#drop table if exists ids;
create table ids (id int primary key, in_use bool);
insert ids values
(1,0),
(2,0),
(3,0),
(4,0),
(5,0),
(6,0),
(7,0),
(8,0),
(9,1),
(10,1),
(11,0),
(12,0),
(13,0),
(14,0),
(15,0),
(16,0),
(17,0),
(18,0),
(19,0),
(20,0),
(21,0),
(22,0),
(23,0);

以下查询将为您提供所有可能的序列开始和结束,以满足所需的范围大小(末尾的 where 子句);

select seq_start, id seq_end
from
(
select
id,
@start:=IF(in_use,null,IFNULL(@start,id)) seq_start,
@rownum:=IF(@start is null, 0, @rownum+1) rownum
from (select @start:=0, @rownum:=0) s
cross join ids
order by id
) numbered
where rownum = 11;

关于MYSQL 分组查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5254610/

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