0

重複の可能性:
フィールドを id の値に更新する MySQL トリガー

3つのフィールドを持つテーブルがあります:

Id (auto increment)
GroupById
Text

そして、新しい行を挿入するときに必要です。フィールド groupById を空白のままにすると、デフォルトでフィールド Id と同じ値を取得する必要があります。

何かアイデアはありますか?前もって感謝します。

編集:私のコード:

mysql_query("INSERT INTO group SET GroupById = (must get the current Id), Text = 'bla bla bla' ");
4

5 に答える 5

1

トリガーはどうですか:

DELIMITER $$
CREATE TRIGGER trg_yourtable
BEFORE INSERT ON yourtable
FOR EACH ROW
BEGIN
  IF NEW.GroupById IS NULL THEN
    SET NEW.GroupById = (
        SELECT AUTO_INCREMENT 
        FROM information_schema.TABLES 
        WHERE TABLE_SCHEMA = DATABASE() 
            AND TABLE_NAME = 'yourtable'
    );
  END IF;
END $$

これがどれほど安全かはわかりません...または、1つのクエリから複数の行を挿入した場合、または2つの接続が同時に挿入しようとした場合にどうなりますか...しかし、動作します.

于 2012-12-12T23:37:27.843 に答える
1

この単純な SQL は、あなたが望むことをするはずです:

INSERT INTO myTable (GroupById, Text) VALUES (NULL, 'your text');
SET @lastID = LAST_INSERT_ID();
UPDATE myTable SET GroupById = @lastID WHERE Id = @lastID;
于 2012-12-13T00:08:26.537 に答える
0

この機能を使用| テスト済み

使用例:

function get_current_insert_id($table)
{
    $q = "SELECT LAST_INSERT_ID() FROM $table"; 
    return mysql_num_rows(mysql_query($q)) + 1;
}

$txt = "text";
$groupID = '';

if ( empty($groupID) ) { $groupID = get_current_insert_id(test);  } 

$query = mysql_query("INSERT INTO test VALUES ('', '$groupID', '$txt') "); 

if ( $query ) { echo 'Saved using ID:' . $groupID; } else { echo 'Oh noes!' . $query; }
于 2012-12-13T01:18:17.803 に答える
0

ストアド プロシージャを使用する

  1. MAX ID を取得する
  2. それに1を追加し、両方の行に挿入します

1 回のトランザクションで目的の結果が得られます。

お役に立てれば。

于 2012-12-12T23:55:11.333 に答える
0

2 つのクエリを実行する必要があるようです。

  1. insert into 'table' ('GroupById', 'Text') VALUES ('{group id}', '{sometext}')
  2. update 'table' set GroupById = id where GroupById = null- db に挿入する内容によっては、null ではなく 0 になる場合があります。

インデックス、制限、順序によっていつでも最適化できます。

于 2012-12-12T22:46:19.807 に答える