关于订单和订单明细的问题

idoly 2005-01-12 04:47:18
小弟实习做一电子商务网站
我数据库里建了三张表 分别是购物车表,订单表,订单明细表
现在遇到一问题 想让用户在提交订单时 把购物车表的内容写进订单表和订单明细表 同时把购物车表里的东西给清空 实习马上到期 希望高手指点 给一百分
望能具体一点
其中购物车表由 id_购物车 用户名 id_书 价格 数量
订单明细表由 id_明细 id_订单 数量 价格
订单表由 id_订单 id_顾客 交易时间 付款标志
...全文
574 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
idoly 2005-01-13
  • 打赏
  • 举报
回复
骆驼的理解是正确的
我就是想在他在购物车页面里确定的时候把购物车表里的数据写到订单明细核订单表中
同时把购物车表给清空
zjcxc 2005-01-13
  • 打赏
  • 举报
回复
--简单地说,可以用一个存储过程实现,在用户提交订单时,调用此存储过程
--具体如何写,楼主参考此存储过程处理

create proc p_process
@id_购物车 int
as
begin tran --用事务配合下面的排它锁,保证数据一致性

if exists(select * from 购物车表 with(TABLOCKX) --用排它锁,防止多次提交
where id_购物车=@id_购物车)
begin
insert 订单表(id_顾客,交易时间,付款标志)
select distinct 用户名,getdate(),0
from 购物车表 with(TABLOCKX)
where id_购物车=@id_购物车

insert 订单明细表(id_订单,数量,价格)
select @@identity, 价格,数量
from 购物车表 with(TABLOCKX)
where id_购物车=@id_购物车
end
else
begin
raiserror('"%d" 号购物车不存在!',1,16,@id_购物车)
rollback tran
end
zjcxc 2005-01-13
  • 打赏
  • 举报
回复
--少了一个清除

create proc p_process
@id_购物车 int
as
begin tran --用事务配合下面的排它锁,保证数据一致性

if exists(select * from 购物车表 with(TABLOCKX) --用排它锁,防止多次提交
where id_购物车=@id_购物车)
begin
insert 订单表(id_顾客,交易时间,付款标志)
select distinct 用户名,getdate(),0
from 购物车表 with(TABLOCKX)
where id_购物车=@id_购物车

insert 订单明细表(id_订单,数量,价格)
select @@identity, 价格,数量
from 购物车表 with(TABLOCKX)
where id_购物车=@id_购物车

delete from 购物车表
where id_购物车=@id_购物车
end
else
begin
raiserror('"%d" 号购物车不存在!',1,16,@id_购物车)
rollback tran
end
jacksom 2005-01-12
  • 打赏
  • 举报
回复
up
camel_yang 2005-01-12
  • 打赏
  • 举报
回复
我的理解:楼主的提交就是想在订单明细中插入购物车表该用户的记录并且删除购物车中的那条记录,同时在订单中记录购物车产生的该用户的订购记录.不知楼主是不是这个意思?
iswear428 2005-01-12
  • 打赏
  • 举报
回复
用一个事务来处理吧,这样能保证业务数据的一致性
BEGIN TRAN

DECLARE @D_ID INT

INSERT INTO 订单表
VALUESE(用户名,GETDATE(),付款标志)

IF @@ERROR >0 THEN ROLLBACK

SET @D_ID=@IDENTITY

INSERT INTO 订单明细表
SELECT @D_ID,id_书,数量

IF @@ERROR >0 THEN ROLLBACK

TRUNCATE TABLE 购物车表

COMMIT TRAN
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
子陌红尘 2005-01-12
  • 打赏
  • 举报
回复
以上是简单的处理模式,最好用存储过程封装一下,对表操作部分用事务实现。
子陌红尘 2005-01-12
  • 打赏
  • 举报
回复
declare @shoping_id int
declare @order_id int

set @shoping_id = ... --当前要提交订单的购物车ID

insert into id_订单(id_顾客,交易时间,付款标志) select 用户名,getdate(),0 from 购物车表 where id_购物车 = @shoping_id

select @order_id = SCOPE_IDENTITY()

insert into 订单明细表(id_订单,数量,价格,id_书) select @order_id,价格,数量,id_书 from 购物车表 where id_购物车 = @shoping_id

delete from 购物车表 where id_购物车 = @shoping_id
zjcxc 2005-01-12
  • 打赏
  • 举报
回复
1.提交怎么触发数据库?
2.订单表中的那些数据由购物车得到? 那些数据自动生成,怎么转换? 那些是固定值字段?
camel_yang 2005-01-12
  • 打赏
  • 举报
回复
写个触发器来做,等邹老大来.我也学习一下!

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧