MYSQL组在一起查询
问题描述:
我有一个表中有512个条目(最初,这将增加我们添加到它的记录)。这个表有列:MYSQL组在一起查询
-
id
(id
被auto_incrementing和初级) ip_address
-
in_use
(in_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;
+1:确认,作品在5.1.49 – 2011-03-10 02:38:33
我会给它一个镜头! – 2011-03-10 08:06:20