首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

有一个自动执行数据库更新的有关问题,大哥们帮忙,小弟实在不懂了

2012-02-13 
有一个自动执行数据库更新的问题,大哥们帮忙,小弟实在不懂了----表的结构`orderformlist`--CREATETABLE`or

有一个自动执行数据库更新的问题,大哥们帮忙,小弟实在不懂了
--  
--   表的结构   `orderformlist`
--  
CREATE   TABLE   `orderformlist`   (
    `oid`   int(11)   NOT   NULL   auto_increment,
    `pid`   int(11)   NOT   NULL   default   '0 ',
    `uid`   int(11)   NOT   NULL   default   '0 ',
    `oCode`   varchar(30)   NOT   NULL   default   ' ',
    `pCode`   varchar(30)   NOT   NULL   default   ' ',
    `consignee`   varchar(30)   NOT   NULL   default   ' ',
    `address`   varchar(255)   NOT   NULL   default   ' ',
    `telephone`   varchar(20)   NOT   NULL   default   ' ',
    `mobileTelephone`   varchar(20)   NOT   NULL   default   ' ',
    `pName`   varchar(30)   NOT   NULL   default   ' ',
    `pSpecification`   varchar(30)   NOT   NULL   default   ' ',
    `pColor`   varchar(20)   NOT   NULL   default   ' ',
    `pUnits`   varchar(10)   NOT   NULL   default   ' ',
    `credits`   decimal(10,0)   NOT   NULL   default   '0 ',
    `pBarbarismPrice`   decimal(10,2)   NOT   NULL   default   '0.00 ',
    `unitPrice`   decimal(10,2)   NOT   NULL   default   '0.00 ',
    `amount`   int(5)   NOT   NULL   default   '1 ',
    `paymentMethod`   varchar(255)   NOT   NULL   default   ' ',
    `paymentGist`   varchar(255)   NOT   NULL   default   ' ',
    `estate`   int(5)   NOT   NULL   default   '0 ',
    `pHase`   int(5)   NOT   NULL   default   '0 ',
    `datetime`   datetime   NOT   NULL   default   '0000-00-00   00:00:00 ',
    `remark`   varchar(60)   NOT   NULL   default   ' ',
    `buyTime`   datetime   NOT   NULL   default   '0000-00-00   00:00:00 ',
    `congealEstate`   int(11)   NOT   NULL   default   '0 ',
    PRIMARY   KEY     (`oid`)
)   TYPE=MyISAM   AUTO_INCREMENT=14   ;

 
--  
--   表的结构   `accountlist`
--  
CREATE   TABLE   `accountlist`   (
    `uid`   int(5)   NOT   NULL   auto_increment,
    `credits`   decimal(10,0)   NOT   NULL   default   '5 ',
    KEY   `uid`   (`uid`)
)   TYPE=MyISAM   AUTO_INCREMENT=12   ;

--------------------------------
当orderformlist.estate字段的值被改为2的时候(0值表示预定单,1值表示正在送货,2值表示已到货并付款,3值表示已退订单),当orderformlist.estate字段的值被修改时,orderformlist.buyTime字段记录orderformlist.estate字段的修改时间,然后根据orderformlist.buyTime字段记录的修改时间至10天后把orderformlist.credits字段中的值加入accountlist.credits字段中,条件为orderformlist.uid=accountlist.uid,orderformlist.congealEstate字段中的值被改为1(0值表示没冻结,1值表示冻结)。如果10天之中orderformlist.estate字段的值从2被修改为其他值,那么
根据orderformlist.buyTime字段记录的修改时间至10天后把orderformlist.credits字段中的值加入accountlist.credits字段中条件为orderformlist.uid=accountlist.uid,orderformlist.congealEstate字段中的值被改为1的这一操作失效。如果当orderformlist.estate字段的值再次改为2时,orderformlist.buyTime重新记录修改时间。



PS:假设每天都会有用户的定订单的orderformlist.estate字段值被改为2或是从2值被改为其他值,这种情况是存在的。

我想实现的就是需要这一操作不是通过PHP程序在用户每次登入时去遍历用户orderformlist.estate字段值为2的订单,而是通过其他途径来解决对用户订单
检查,并对检查结果做其操作。
PHP   +   MySQL   4.0.1.2

[解决办法]
你的意思是定时执行这种程序来处理?


[解决办法]
建议,在orderformlist.estate字段的值被改变的时候,去判断,然后用php去处理数据库的内容,例如插入,更新数据什么的。
如果是mysql5.0 的话,也写个触发器,这样就能够楼主所说的自动。
具体的触发器如何写,要根据实际业务来定,触发器如何写,楼主看看帮助文档即可。

[解决办法]
我明白你的意思,你的是要实现将来时的自动数据转换。
我提到的方法不能实现,只能够实现当前的动作的。

要实现你的东西,最简单的解决办法就是添加任务(每过一段时间检测一下,看看有没有待处理的东西,如果结构组织好了,这个过程是很高效的),但是,MySQL本身没有任务的概念。唉,真麻烦。我再想想,先吃饭了。

楼主的 用户每次登入的时候用 的唯一缺点就是,用户登录的时间可能会比较长。

[解决办法]
现在好像的唯一方法,就是,从操作系统上增加一项任务,就是定点执行一个程序,该程序的功能就是调用一段存储过程,如果不支持存储过程,也可以把存储过程写在程序里面。

增加一个表,为这个程序使用。该表的是有一个时间字段,一个sql字段。

select id,sql from table where mytime=now()

然后用程序或者存储过程,执行每条sql,并执行玩该条sql后,自动从table表里面删除该行记录。

数据格式:
id time sql
1 2007-9-10 delete from t1 where ........;
2 2009-1-9 insert t2 ............;
3 2008-9-3 update ..............;
4 2007-8-1 call mystoreproduce();
5 2007-6-7 ...............

等等,也就是说,sql字段的内容就是一条完整的sql语句,如果楼主不想弄这个字段,也可以拆解开,然后用的时候再拼上也可以。

唉,如果 MySQL支持任务,也就没有这么麻烦了。


[解决办法]
数据格式:
id mytime execsql
1 2007-9-10 delete from t1 where ........;
2 2009-1-9 insert t2 ............;
3 2008-9-3 update ..............;
4 2007-8-1 call mystoreproduce();
5 2007-6-7 ...............

select id,execsql from table where mytime=now();

当然了,这个表的数据插入也得依据业务上的逻辑才可以,这点楼主比我更清除了。
要保证的是,插入的SQL语句要正确,否则,10天之后,调用该语句的时候,执行失败,可就....

如果是程序的话,就不说了,如果是从存储过程里面,需要用到游标,具体用法,楼主回头自己看看吧。

[解决办法]
afsad
[解决办法]
讨厌一大堆的!
[解决办法]
mark
[解决办法]
没完全看完。

现在各PHP论坛的缓存应用就是检测是否需要更新,如果需要更新就重新读取数据库,如果不需要就不读取数据。

可以把思想借鉴过来。
[解决办法]
create trigger 然后利用mysql的关键字NEW,这样行不?
[解决办法]
mysql就是不方便!
[解决办法]
mysql不会用,oracle可以设置作业来实现的

热点排行