保存定单有没有效的字段,我现在在考虑有没有什么用 我想可不可以这样,由于订单都保存了订购时间和过期时间 续费订单也一样, 那么我可以加一个字段代表这两个订单的附属关系 比如为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不知这样可行否?
附属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
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吧,这样一来最多只能得到一条记录.
如果拆分成两张表的话,数据量一上规模,在做统计分析的时候,可能会用到过多的联合查询,增加mysql负担...
我想可不可以这样,由于订单都保存了订购时间和过期时间
续费订单也一样,
那么我可以加一个字段代表这两个订单的附属关系 比如为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不知这样可行否?
你现在的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
附加的字段应用于表示定单的有效性,过期的定单是无效的。
查询时不能使用group子句,该子句只在分组统计时有用,不能非统计字段的有效性。
要想正确得到组间最大值对应的记录,必须使用子查询或使用临时表的方法,
是这样吗?
所以只要这样查询:
select * from 'order' where status='有效' and (TO_DAYS(expire_time)-TO_DAYS(NOW())) < 30
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
不过既然有这个字段,何尝不用他来多保留些信息呢?
假定
0 表示最初的定单,但现在已经过期
1 表示期间曾经生效,现在已经过期的定单
2 表示当前有效的定单
那么想知道续费一次以上的用户,不就直接... WHERE order_id=0 就找到了吗?
宽度为1字节的数字型字段可存储10种状态
宽度为1字节的字符型字段可存储36种以上状态
利用一下有何不可?
刚才看了一下你写的那个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吧,这样一来最多只能得到一条记录.