会员卡里的会员级别数据表设计问题

需求

会员卡管理系统里的会员级别表设计问题

最终数据

普通会员 积分要求0-10000
金牌会员 积分要求100001-30000
白金会员 积分要求30000-无限

怎么设计更好?

id name(会员级别名称) pointsA(最低积分) points(最高积分)???

这样两个字段写好不好?

无限用-1来区分?

阅读 10.1k
5 个回答

提供一个想法:
有一个字段叫 level,int类型,区分等级。
不需要最高积分了,触发到某一个等级最低积分,就到这等级了。
保存数据时,得保证高等级的最低积分不能比低等级的最低积分 更低。

我觉得你这么设计可以.
当获取一个用户信息的时候,
select 用户表.*, 积分表.level from 用户表 left join 积分表 on 用户表.积分 between 积分表.lower and 积分表.higher

从你问题描述和评论内容来看可以这样定义用户会员等级定义表格
表名:vip_level
表结构:id, vl_name, vl_achieve_score(decimal(n,2)), vl_discount(decimal(n,2))

为什么这样创建?
比如一个用户他的会员积分是50分,通过积分到vip_level表中依据vl_achieve_score降序排列获取第一条数据就可以了

另外,如果按照你的创建表结构的思路@vsion的查询会报错

between 积分表.lower and 积分表.higher

在白金会员30000 ~ -1怎么整?

@柳公子

图片描述

问题一、如图 我按照您说的设计的数据表 并定义了三个会员级别,用下面的Sql语句才能正确找到100这个积分所属的级别;您说的升序,我测试只有降序才行,升序永远都是普通会员。

SELECT * FROM `scs_vip_level` WHERE `score` < 100 ORDER BY score desc LIMIT 1 

问题二 如果积分为0 则返回null了。

问题三 比如查询所有 金牌会员级别的会员信息出来 要怎么写呢,

select * from 会员表 where 积分 >= 10000 order by id desc 

这么写那么30000以上积分的白金会员也属于 >= 10000的 也都查出来了就不对了啊

今天我有点懵逼逻辑混乱,感谢您的耐心

最好是,在用户表里用一个外键(level_id)关联会员等级表,这样不会乱,你修改哪个表的数据都没有关系,ID永远不会变的。
还有一个关于最高积分的获取,可以这样:直接取大于当前等级积分的积分,如果没有就是无限,如果有就用取到的减1就是当前等级的最大积分。当然这个方法不是处理sql语句,而是对取出来的数据进行遍历处理下,可能比较麻烦,仅供参考。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏