我有一个mysql数据库和一个插入内容的表单。如果有一行Status
列等于“新”或“重新部署”并且是相同的$标签(这是他们输入到表单区域的内容),我想阻止添加一行
基本上我想阻止人们添加一个条目,如果那个$ tag已经存在状态为“new”或“redeploy”。有点难以解释
这是我当前的查询,任何帮助或想法将不胜感激。
mysql_query ("INSERT INTO Assets (`Badge`, `First Name`, `Last Name`, `Service Tag`, `Asset Tag`, `Status`, `Employee Status`, `Username`, `deleted`)
VALUES('$badge', '$first', '$last', '$tag', '$asset', '$status', '$estatus', '$user', '$deleted') ") or die (mysql_error());
答案 0 :(得分:1)
执行此操作的最佳方法是在表上使用检查约束。这样,无论插入/更新如何,都将始终强制执行您的条件。
http://www.w3schools.com/sql/sql_check.asp
对于这样的事情,你可能也想创建一个函数。所以你的功能看起来像是:
CREATE FUNCTION CheckAssetRows(@Tag VARCHAR(50))
RETURNS INT
AS
BEGIN
DECLARE @NumInvalidRows INT
SELECT @NumInvalidRows = COUNT(*)
FROM Asset
WHERE [Service Tag]=@Tag
AND [Status] in ('New', 'Redeploy')
RETURN @NumInvalidRows
END
GO
您的支票很简单:
ALTER TABLE ASSET
ADD CONSTRAINT chk_Tag CHECK(CheckAssetRows([Service Tag]) = 0)