Как найти значение диапазона из базы данных

Как найти значение на основе диапазона, хранящегося в базе данных.

Моя таблица friend_levels :

введите описание изображения здесь

и в моей таблице profile :

введите описание изображения здесь

Когда у меня есть friend_points = 1 , я получу нормальную friend_points = 180 , тогда, если бы у меня была friend_points = 180 я получу Great Friend , так что в основном это происходит при программировании

 if($profile_points >= 0 && $profile_points < 50) { return 'Normal Rate'; } else if($profile_points >= 50 && $profile_points < 100) { return 'Friend'; } else if($profile_points >= 100 && $profile_points < 150) { return 'Good Friend'; }.... 

мой вопрос тоже, возможно ли это по запросу QUERY? или я просто делаю это на PHP?

EDIT1 : Есть ли способ получить следующее целевое значение? Напр. Если я нахожусь на Friend rate with 68 points как получить 100 = Good Friend ? никогда не поддавайтесь, я просто хочу получить следующую строку.

введите описание изображения здесь

Если я правильно понял вас, вы можете использовать CASE EXPRESSION следующим образом:

 SELECT id,user_id, case when friend_points between 0 and 49 then 'Normal rate' when friend_points between 50 and 99 then 'Friend' when friend_points between 100 and 149 then 'Good friend' ....... end as 'Friend_Status' FROM profile 

РЕДАКТИРОВАТЬ:

Или, если эти имена могут динамически меняться, то с соединением:

 SELECT t.id,t.user_id,s.name FROM profile t INNER JOIN friend_levels s ON(t.friend_points >= s.points_needed) WHERE s.points_needed = (select min(f.points_needed) from friend_levels f where t.friend_points >= f.points_needed) 

следующая наименьшая точка

 SELECT MAX (DISTINCT points_needed) FROM friend_levels WHERE points_needed < =$profile_points; 

следующая высшая точка

 SELECT MIN (DISTINCT points_needed) FROM friend_levels WHERE points_needed > $profile_points; 

Метод CASE, предложенный Sagi, работает, но означает, что вам нужно обновить свой код (SQL в этом случае, а не PHP), если вы хотите изменить диапазоны.

Метод Сафина является лишь частью решения – для того, чтобы найти соответствующее описание, запрос Safin должен быть встроен в выборку с объединением / подзапросами в соответствии с обновлением Sagi, но это несколько неэффективно.

Лично я бы не использовал для этого агрегацию:

 SELECT user_id, (SELECT fl.name FROM friends_level fl WHERE fl.points_needed<profiles.friend_points ORDER BY fl.point_needed DESC LIMIT 0,1) as level FROM profiles