2

希望有人可以在这里帮助我...

我试图弄清楚如何对数据库字段进行检查。

我有一个名为“级别”的字段,它存储像“0-7”这样的数据(从0到7)

我怎样才能做一个mysql查询来检查:

表“值”:

ID  | LEVEL
1   | 0-7
2   | 3-6
3   | 4-5

查询值 "4" 在任何行 "level" 之间的位置。

谢谢您的帮助!

否则,我将不得不首先获取所有行并进行拆分以验证您创建一个具有低值和高值的新字段,然后进行比较。

更新:

所有很棒的遮阳篷,但更糟糕的是做这张桌子的白痴

创建和额外的字段,如:

ID  | LEVEL | Name
1   | 1-7   | level
2   | 3-6   | xperience
3   | 4-5   | level
4   | 1-5   | level

这意味着我还必须根据“名称” = 级别的位置进行子字符串化。是否可以?

4

5 回答 5

3

制作两个名为“level_min”和“level_max”的字段,并让它们存储从“0”到“7”的数据
然后使用mysql BETWEEN查询

SELECT * FROM t WHERE 4 BETWEEN level_min AND level_max

最重要的是,这样的查询可以使用索引,需要 id。
这对于任何或多或少的活数据库都是必不可少的。

于 2013-02-14T12:03:38.413 回答
1

如果您不想更改架构,请执行以下操作:

create table test(
    id integer primary key auto_increment,
    level varchar(50)
);

insert into test(level) values('0-7');
insert into test(level) values('3-6');
insert into test(level) values('4-5');

commit;

select *
from test
where 4 between SUBSTRING_INDEX(level, '-', 1) AND SUBSTRING_INDEX(level, '-', -1);
于 2013-02-14T12:06:11.967 回答
0

如前所述,拆分字段对于性能来说是一个好主意。如果你因为任何原因不能这样做,你可以使用 substring_index:

SELECT * FROM values WHERE 
substring_index(level,'-',1) <= 4 AND 
substring_index(level,'-',-1) >= 4; 
于 2013-02-14T12:09:46.533 回答
0
select * from table_name where 4 between SUBSTRING_INDEX(LEVEL,'-',1) 
and SUBSTRING_INDEX(LEVEL,'-',-1);
于 2013-02-14T12:12:44.857 回答
-1

我会将级别字段分成 2 个字段,最小值和最大值,以使生活更轻松。但是你可以做一个

select Id from table where 4 between SUBSTRING(level, 0, 1) and SUBSTRING(level, 2, 1)

在您当前的数据上。Mysql 应该自动将子字符串转换为 int。

于 2013-02-14T12:07:09.547 回答