1

私は mysql データベースとそれに何かを挿入するフォームを持っています。Status列が「新規」または「再展開」に等しく、同じ $tag (フォームの領域に入力しているもの) である行があった場合、行を追加しないようにしたいと思います。

基本的に、その $tag が「新規」または「再デプロイ」のステータスで既にそこにある場合、人々がエントリを追加できないようにしたいと考えています。説明するのが難しい

これが私の現在の質問です。任意の支援やアイデアをいただければ幸いです。

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

1 に答える 1

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)
于 2012-11-29T21:42:59.927 に答える