如何从数据库中查找范围值

时间:2016-02-15 13:02:36

标签: php mysql

如何根据存储在数据库中的范围查找值。

我的friend_levels表:

enter image description here

并在我的profile表格中:

enter image description here

当我有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?没关系减法,我只是想得到下一行。

enter image description here

3 个答案:

答案 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