您的位置:程序门 -> 其他数据库开发 -> mysql/postgresql



关于my sql的视图,希望大家帮忙,在线等


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于my sql的视图,希望大家帮忙,在线等[已结贴,结贴人:rain_cn]
发表于:2007-06-19 11:39:56 楼主
首先,有两个表,一个是用户存钱的表,一个是用户消费(包括收入和支出)的两个表,例如,表结构大体如下:
用户存钱的表(cunqian):
id     user_id       volume       time
1       0001             100             2007-06-11
2       0001             100             2007-06-15
3       0001             100             2007-06-18
用户消费的表(shouzhi):
id     user_id       volume       time                     flag
1       0001             50               2007-06-18         0
2       0001             10               2007-06-18         1
3       0001             8                 2007-06-18         1
业务逻辑如下:首先用户在存钱(cunqian)表存钱,然后就可以消费了;消费时在消费(shouzhi)表中记录消费情况,如果flag值是0,证明是花钱了;flag值是1,证明是收入了。
我在程序里控制:
select   sum(volume)   from   cunqian   where   user_id= '0001 '   得到指定用户的总金额
select   sum(volume)   from   shouxiao   where   flag=1   and   user_id= '0001 '   得到指定用户的总收入
select   sum(xs_volume)   from   shouxiao   where   flag=0   and   user_id= '0001 '   得到指定用户的总支出(消费)
然后在程序计算用户当前的总余额。

需求:怎么在sql里实现同样的功能,最好是用视图实现,存储亦可,不之道mysql5支不支持存储过程,只要不是像我这样在程序里控制就行。我的sql垃圾,先多谢大家了。
发表于:2007-06-19 11:43:261楼 得分:0
select   sum(xs_volume)   from   shouxiao   where   flag=0   and   user_id= '0001 '   得到指定用户的总支出(消费)
这个里面的xs_volume在这里就是shouzhi表里的volume,刚才粘贴过来的时候疏忽了。
发表于:2007-06-19 12:55:362楼 得分:0
自己顶~~~~~~~~~~~~~~~~~~~~~~~~
发表于:2007-06-19 14:55:163楼 得分:0
再顶~~~~~~
说一下,volume是金额。
创建一个传入user_id值的存储过程,得到结果~~~
顶~~~~~~~
怎么人不多啊?还是提的问题不科学啊   ~~~~
发表于:2007-06-19 15:20:014楼 得分:10
第一种方法
create   procedure   a   @@sum   money   output
as
select   @@sum   =   sum(volume)   from   cunqian   where   user_id= '0001 '  
go
declare   @b   money
EXEC   a   @b   output
select     @b+@b
print   convert(varchar(12),@b)

--------------
第二种方法
declare   @c   money
select   @c   =   sum(volume)   from   cunqian   where   user_id= '0001 '  
select     @b+@b
print   convert(varchar(12),@c)
发表于:2007-06-19 17:05:475楼 得分:10
你自己不是已经写出来视图了?
create   view   yuev   as
select   c1.sv+s1.sv-s2.sv   from  
(select   sum(volume)   as   sv   from   cunqian   where   user_id= '0001 '   )   as   c1,
(select   sum(volume)   as   sv   from   shouxiao   where   flag=1   and   user_id= '0001 ')   as   s1,
(select   sum(volume)   as   sv   from   shouxiao   where   flag=0   and   user_id= '0001 ')   as   s2

好想是这个样子写的啦,基本语句是你写的,我组合了一下,没有经过测试.
发表于:2007-06-21 09:29:416楼 得分:0
create   view   yuev   (volume)   as
select   c1.sv+s1.sv-s2.sv     from  
(select   sum(volume)   as   sv   from   cun   where   user_id= '0001 '   )   as   c1,
(select   sum(volume)   as   sv   from   sz   where   flag=1   and   user_id= '0001 ')   as   s1,
(select   sum(volume)   as   sv   from   sz   where   flag=0   and   user_id= '0001 ')   as   s2

~~~~~~~~~~~~~~~~~多谢,结贴
发表于:2007-06-21 09:55:547楼 得分:0
结贴了,自己再发一个:
create   view   ye   (ye_volume,   user_id,shou,zhi,zong)   as
select   c1.sv+s1.sv-s2.sv   ,c1.user_id   as   user_id,s1.sv,s2.sv,c1.sv   from  
(select   sum(volume)   as   sv,   user_id   from   cun   group   by   user_id)   as   c1,
(select   sum(volume)   as   sv,   user_id   from   sz   where   flag=1   group   by   user_id)   as   s1,
(select   sum(volume)   as   sv,   user_id   from   sz   where   flag=0   group   by   user_id)   as   s2   where   c1.user_id=s1.user_id   and   c1.user_id=s2.user_id
发表于:2007-06-21 10:11:258楼 得分:0
该回复于2007-12-20 14:08:49被管理员删除


快速检索

最新资讯
热门点击