2012-11-29 96 views
1

我有一個mysql數據庫和一個插入東西的表單。如果有一行的Status列等於「新建」或「重新部署」並且是相同的$標記(這是他們輸入到表單的區域中),我想阻止添加一行帶條件的mysql插入

基本上我想阻止人們添加一個條目,如果該$標籤已經在那裏與「新」或「重新部署」的狀態。有點難以解釋

這裏是我目前的查詢任何援助或想法,將不勝感激。

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()); 

回答

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][email protected] 
    AND [Status] in ('New', 'Redeploy') 

    RETURN @NumInvalidRows 
END 
GO 

而且你的支票是很容易:

ALTER TABLE ASSET 
ADD CONSTRAINT chk_Tag CHECK(CheckAssetRows([Service Tag]) = 0) 
+0

謝謝,我會考慮嘗試是 – user1548769

+0

我的編輯應有助於讓你開始。沒有什麼是測試,我只是把它扔在一起。 –

+0

我仍在努力不斷地嘗試創建功能不當的語法。通過一些修改,我能夠得到它說:「#1415 - 不允許從函數返回結果集」任何額外的建議? :) – user1548769