Rumah > Soal Jawab > teks badan
会员卡管理系统里的会员级别表设计问题
普通会员 积分要求0-10000
金牌会员 积分要求100001-30000
白金会员 积分要求30000-无限
id name(会员级别名称) pointsA(最低积分) points(最高积分)???
这样两个字段写好不好?
无限用-1来区分?
PHPz2017-04-11 09:47:23
提供一个想法:
有一个字段叫 level,int类型,区分等级。
不需要最高积分了,触发到某一个等级最低积分,就到这等级了。
保存数据时,得保证高等级的最低积分不能比低等级的最低积分 更低。
怪我咯2017-04-11 09:47:23
我觉得你这么设计可以.
当获取一个用户信息的时候, select 用户表.*, 积分表.level from 用户表 left join 积分表 on 用户表.积分 between 积分表.lower and 积分表.higher
阿神2017-04-11 09:47:23
从你问题描述和评论内容来看可以这样定义用户会员等级定义表格
表名: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怎么整?
怪我咯2017-04-11 09:47:23
@柳公子
问题一、如图 我按照您说的设计的数据表 并定义了三个会员级别,用下面的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的 也都查出来了就不对了啊
今天我有点懵逼逻辑混乱,感谢您的耐心
PHP中文网2017-04-11 09:47:23
最好是,在用户表里用一个外键(level_id)关联会员等级表,这样不会乱,你修改哪个表的数据都没有关系,ID永远不会变的。
还有一个关于最高积分的获取,可以这样:直接取大于当前等级积分的积分,如果没有就是无限,如果有就用取到的减1就是当前等级的最大积分。当然这个方法不是处理sql语句,而是对取出来的数据进行遍历处理下,可能比较麻烦,仅供参考。