MYSQL组在一起查询

问题描述:

我有一个表中有512个条目(最初,​​这将增加我们添加到它的记录)。这个表有列:MYSQL组在一起查询

  • idid被auto_incrementing和初级)
  • ip_address
  • in_usein_use是布尔,真/假)

基本上我有地址的列表中的这个(就像我刚才说的那样得到了512)

我需要问一下mysql返回ro ws没有使用,但将它们组合在一起(即我需要11个空闲地址),

但是,此系统将在in_use列上标记为false的行与其他列中的行标记为true,并将其标记为true。

我需要一种方法来抓住ID被顺次断裂IP的设置量...例如

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); 

以下查询会给你的所有可能的序列的开始和结束,以满足范围大小所需(其中在最后条款);

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; 
+0

+1:确认,作品在5.1.49 – 2011-03-10 02:38:33

+0

我会给它一个镜头! – 2011-03-10 08:06:20