我需要一些方法的帮助。
我在表单text
中有3个'add_task'
个输入:
<form action="page.php" method="POST">
<input type="text" name="task_string" value="" />
<input type="text" name="hours" value="" />
<input type="text" name="minutes" value="" />
<input type="submit" value="Add Task" />
</form>
表单&#39;创建&#39;使用上述输入的时间轴任务。
现在,我有两个表,tasks
和timelines
我可以使用INSERT INTO
值task_string
任务表,然后该条目包含一个自动递增的唯一id
。
// tasks
+----+------------------+
| id | string |
+----+------------------+
| 1 | task string here |
+----+------------------+
我现在需要在minutes
表中输入hours
和timelines
值,但我需要参考上面的tasks.id
//timelines
+----+-------+---------+-----------------------------+
| id | hours | minutes | task_id |
+----+-------+---------+-----------------------------+
| 1 | 3 | 29 | // task_id from table above |
+----+-------+---------+-----------------------------+
如何在多用户环境中使用SQL Server和PHP实现此目的?
答案 0 :(得分:1)
您可以将@@IDENTITY
用于此目的;以下是一个例子。但是对于多用户环境,您必须使用transaction block
来确保插入成功。
create procedure doDML(@task_string varchar(100),@hours int, @minutes int)
as
begin
declare @lastID int;
insert into tasks values(@task_string);
set @lastID = @@IDENTITY;
insert into timelines values(@hours, @minutes, @lastID);
end
答案 1 :(得分:1)
您可以使用存储过程插入带有输出参数的任务。此参数应该是来自id
的新生成的dbo.taks
:
CREATE PROCEDURE dbo.Tasks_Insert (
@id INT OUTPUT, -- dbo.tasks.id
@name NVARCHAR(50) -- Replace it with the propper data type
)
AS
BEGIN
INSERT dbo.tasks (name, ...) VALUES (@name, ...)
SET @id = SCOPE_IDENTITY()
END;
GO
这样,dbo.Tasks_Insert
将返回新的id
。
然后,您可以使用另一个SP将数据插入时间轴:
CREATE PROCEDURE dbo.Timelines_Insert (
@id INT OUTPUT, -- dbo.timelines.id
@duration TIME(0), -- or @minutes INT, 3h 29m could be stored as 209m
@task_id INT -- the @id OUTPUT parameter from dbo.Tasks_Insert
)
AS
...