Как найти значение на основе диапазона, хранящегося в базе данных.
Моя таблица 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