2013-02-14 4 views
2

Надеюсь, что кто-то может помочь мне здесь ...Mysql Beetween сравнить с одним полем?

Я пытаюсь выяснить, как я могу сделать чек против поля базы данных.

У меня есть поле под названием «уровень» и он хранит данные, такие как «0-7» (от 0 до 7)

Как я могу сделать запрос MySQL, чтобы проверить:

Таблица «значения ":

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

Запрос, где значение« 4 »находится между любыми рядами« уровень ».

Спасибо за помощь!

В противном случае мне придется либо сначала получить все строки, либо сделать раскол, чтобы проверить создание нового поля с низким значением и высоким значением, а затем сравнить.

Update:

Все великие awnsers, но даже худший идиот, который сделал эту таблицу

Создано и дополнительное поле, как:

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

Это означает, что я должен подстроки соотв также, где «Имя» = уровень. Возможно ли это?

+2

Это, вероятно, будет лучше, если вы можете изменить дизайн таблицы включить что-то вроде '' low' и high' колонн, а затем проверьте этот диапазон. Что-то подсказывает мне, что это в конечном итоге облегчит вашу жизнь в долгосрочной перспективе. –

+1

@SayemAhmed согласился. –

ответ

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

обновил мой вопрос –

3

сделать 2 поля, называемые «level_min» и «level_max» и заставить их хранить данные от «0» до «7»
Затем с помощью MySQL BETWEEN запроса

SELECT * FROM t WHERE 4 BETWEEN level_min AND level_max 

самое главное, что такой запрос может использовать indedex, идентификатор нужен.
, который необходим для любой более или менее живой базы данных.

+0

Ударьте меня, пока я играл с моими подстрочными функциями в mysql! Это лучший способ сделать это на самом деле, так как текущий дизайн таблицы неудобен. – Husman

-1

Я бы разделить поле на уровне в 2-х полей, мин и макс, чтобы сделать жизнь проще. Но вы можете сделать

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

на текущих данных. Mysql должен автоматически применять подстроку к int.

+0

Я думаю, что он не будет для уровня = '12 -15 ' – fsw

+0

обновил мой вопрос –

0

Как уже отмечалось, было бы неплохо, если бы производительность разделила поле. Если по какой-либо причине не может сделать это, Вы можете использовать SUBSTRING_INDEX:

SELECT * FROM values WHERE 
substring_index(level,'-',1) <= 4 AND 
substring_index(level,'-',-1) >= 4; 
+0

обновил мой вопрос –

+0

Я не понимаю вашу обновленную проблему. Не могли бы вы добавить «AND' Name' = 'level »к вышеуказанному запросу? – fsw

+0

Мне также нужно проверить на наличие опыта ... Уровень 5 И опыт 2 –

0
select * from table_name where 4 between SUBSTRING_INDEX(LEVEL,'-',1) 
and SUBSTRING_INDEX(LEVEL,'-',-1); 
Смежные вопросы