如何根据存储在数据库中的范围查找值。
我的friend_levels
表:
并在我的profile
表格中:
当我有friend_points = 1
时,我会得到正常费率,如果我有friend_points = 180
我会得到好朋友,所以它基本上是这样编程
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
?没关系减法,我只是想得到下一行。
答案 0 :(得分:2)
如果我理解正确,您可以像这样使用CASE EXPRESSION:
PATH
修改强>
或者,如果这个名称可以动态改变,那么使用连接:
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
答案 1 :(得分:0)
下一个最小点
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;
答案 2 :(得分:0)
Sagi提出的CASE方法有效,但如果你想改变范围,则意味着你需要更新你的代码(在这种情况下是SQL而不是PHP)。
萨芬的方法只是解决方案的一部分 - 为了找到相应的描述,萨芬的查询需要根据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