繁体   English   中英

MYSQL组一起查询

[英]MYSQL Group together query

我有一个带有512个条目的表(最初,随着我们添加到表中的记录,该表将增加)。 该表具有以下列:

  • idid是auto_incrementing并且是主要的)
  • ip_address
  • in_usein_use是bool,是/ in_use

基本上,我有一个地址列表(就像我最初说的是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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM