2

誰かがここで私を助けてくれることを願っています...

データベースフィールドに対してチェックを行う方法を見つけようとしています。

「レベル」というフィールドがあり、「0-7」(0から7まで)のようなデータを保存します

チェックするためにmysqlクエリを実行するにはどうすればよいですか:

テーブルの「値」:

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

値 "4" が任意の行 "level" の間にあるクエリ。

助けてくれてありがとう!

それ以外の場合は、最初にすべての行を取得し、分割を行って、低い値と高い値を持つ新しいフィールドを作成してから比較する必要があります。

アップデート:

すべての素晴らしい awnser ですが、さらに悪いことに、このテーブルを作成した馬鹿です。

次のような追加のフィールドが作成されました。

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」という2つのフィールドを作り、「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
select * from table_name where 4 between SUBSTRING_INDEX(LEVEL,'-',1) 
and SUBSTRING_INDEX(LEVEL,'-',-1);
于 2013-02-14T12:12:44.857 に答える
0

前述のように、パフォーマンスのためにフィールドを分割することをお勧めします。何らかの理由でそれができない場合は、substring_index を使用できます。

SELECT * FROM values WHERE 
substring_index(level,'-',1) <= 4 AND 
substring_index(level,'-',-1) >= 4; 
于 2013-02-14T12:09:46.533 に答える
-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 に答える