在普通订单中加入一字段,默认值=空串,用来记录续费记录的ID,每续费一次,就加入一个ID,形成续费记录ID串表. 也便于查询是否续费和续费次数以及具体续费情况.新建一个续费记录表,记录续费的具体情况,并将该记录的ID值在上面的字段中登记.

解决方案 »

  1.   

    比较赞同添加字段的想法,可以记录下续费次数和续费时间(字段内以‘|’分割每一次的续费记录),同时更新有效期。
    如果拆分成两张表的话,数据量一上规模,在做统计分析的时候,可能会用到过多的联合查询,增加mysql负担...
      

  2.   

    保存定单有没有效的字段,我现在在考虑有没有什么用
    我想可不可以这样,由于订单都保存了订购时间和过期时间
    续费订单也一样,
    那么我可以加一个字段代表这两个订单的附属关系 比如为order_id;
    那么记录可能为如下格式
    id     product   order_time    expire_time    money       order_id1   域名(xxx.com)    2004-01-01    2005-01-01   60.00         1
    2   空间(100M)       2004-05-12    2005-05-12   500.00        2   
    3   域名(xxx.com)    2005-01-01    2006-01-01   60.00         1
    ........................
    这样我在查询还有一个月到期的订单就可以这样
    SELECT id, TO_DAYS(max(expire_time))-TO_DAYS(NOW()) AS left_days,
    FROM `order`
    GROUP BY order_id
    HAVING left_days<30不知这样可行否?
      

  3.   

    附属ID的想法是好的,不过我想还要结合xuzuning(唠叨) 的方法,一共要增加两个字段
    你现在的sql语句应该是不成立的,group by里的字段在select中不存在.所以要增加状态字段:SELECT id, TO_DAYS(max(expire_time))-TO_DAYS(NOW()) AS left_days,
    FROM order where status = '有效'
    GROUP BY id
    HAVING left_days<30通过附属ID可以获得续费历史列表
    select * from where order_id = '指定的订单' order by id
      

  4.   

    通常对老用户都会用一些优惠的,所以保存历史情况是有用的
    附加的字段应用于表示定单的有效性,过期的定单是无效的。
    查询时不能使用group子句,该子句只在分组统计时有用,不能非统计字段的有效性。
      

  5.   

    我的SQL语句只能得到left_days的值,不能正确得到该值所对应的记录
    要想正确得到组间最大值对应的记录,必须使用子查询或使用临时表的方法,
    是这样吗?
      

  6.   

    如果增加了状态字段,那么正常情况下,一个订单续单组只有一张是有效的.
    所以只要这样查询:
    select * from 'order' where status='有效' and (TO_DAYS(expire_time)-TO_DAYS(NOW())) < 30
      

  7.   

    记录可能为如下格式
    id     product   order_time    expire_time    money       order_id1   域名(xxx.com)    2004-01-01    2005-01-01   60.00         1
    2   空间(100M)       2004-05-12    2005-05-12   500.00        2   
    3   域名(xxx.com)    2005-01-01    2006-01-01   60.00         2
    ........................设order_id=2为有效定单这样在查询还有一个月到期的订单就可以这样
    SELECT id, TO_DAYS(max(expire_time))-TO_DAYS(NOW()) AS left_days,
    FROM `order`
    WHERE order_id=2
    HAVING left_days<30
      

  8.   

    取任何值都没有多大关系的。
    不过既然有这个字段,何尝不用他来多保留些信息呢?
    假定
    0 表示最初的定单,但现在已经过期
    1 表示期间曾经生效,现在已经过期的定单
    2 表示当前有效的定单
    那么想知道续费一次以上的用户,不就直接... WHERE order_id=0 就找到了吗?
    宽度为1字节的数字型字段可存储10种状态
    宽度为1字节的字符型字段可存储36种以上状态
    利用一下有何不可?
      

  9.   

    to xuzuning(唠叨):
    刚才看了一下你写的那个SQL
    SELECT id, TO_DAYS(max(expire_time))-TO_DAYS(NOW()) AS left_days,
    FROM `order`
    WHERE order_id=2
    HAVING left_days<30既然不用GROUP我看不需要对expire_time求MAX吧,这样一来最多只能得到一条记录.
      

  10.   

    我的建议,沿用以前的表,把续费当成另一条记录,通过order_id关联,另外再加一个字段表示续费次数,0表示没有续费,第一次交费,是否过期失效可以查expire_time字段