Rumah  >  Soal Jawab  >  teks badan

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

需求

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

最终数据

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

怎么设计更好?

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

这样两个字段写好不好?

无限用-1来区分?

高洛峰高洛峰2769 hari yang lalu782

membalas semua(5)saya akan balas

  • PHPz

    PHPz2017-04-11 09:47:23

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

    balas
    0
  • 怪我咯

    怪我咯2017-04-11 09:47:23

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

    balas
    0
  • 阿神

    阿神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怎么整?

    balas
    0
  • 怪我咯

    怪我咯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的 也都查出来了就不对了啊

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

    balas
    0
  • PHP中文网

    PHP中文网2017-04-11 09:47:23

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

    balas
    0
  • Batalbalas