トレーニング ドキュメントのファイリング メカニズムとして使用する 3 つのテーブルがあります。ドキュメント テーブル (a30)、さまざまなトレーニング マニュアルのタイトルと ID を格納するトレーニング マニュアル テーブル (a36trnman)、およびドキュメントの ID を格納するテーブルです。さまざまなマニュアル (a31) に関連付けられているドキュメント。
私のアプリケーションでは、ユーザーがトレーニング マニュアルとそれに関連するドキュメントをコピーして、独自のものにすることができます。ただし、異なるトレーニング マニュアルに同じドキュメントが含まれている可能性があり、トレーニング マニュアルにそのドキュメントの複製が存在する可能性があるため、問題が発生します (変更されている可能性があり、保存する必要があります)。したがって、コピーされているマニュアル内のドキュメントがそのユーザー用に既に存在するかどうかを確認し、存在する場合はそのままにしてa31
、既存のドキュメントを関連付けるテーブルに新しいレコードを作成する、トレーニング マニュアル クエリの複製が必要です。追加されたばかりのトレーニング マニュアルを含む (古い) ドキュメント。
私の文書
CREATE TABLE `a30` (
`docname` varchar(250) NOT NULL,
`docfile` varchar(300) NOT NULL,
`docfilepdf` varchar(300) NOT NULL,
`ctgry` int(8) unsigned zerofill NOT NULL,
`subctgry` int(8) unsigned zerofill NOT NULL,
`id` int(8) unsigned zerofill NOT NULL auto_increment,
`creator` int(8) unsigned zerofill NOT NULL,
`smmry` varchar(60) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='haha!! training materials!' AUTO_INCREMENT=17 ;
CREATE TABLE `a31` (
`pntryid` int(8) unsigned zerofill NOT NULL auto_increment,
`pdocid` int(8) unsigned zerofill NOT NULL,
`trnmannum` int(8) unsigned zerofill NOT NULL,
PRIMARY KEY (`pntryid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='document pantry' AUTO_INCREMENT=43 ;
CREATE TABLE `a36trnman` (
`unik` int(8) NOT NULL auto_increment,
`user` int(8) NOT NULL,
`ctgryname` char(60) NOT NULL,
PRIMARY KEY (`unik`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=88 ;
現在のクエリでは、1. トレーニング マニュアルをコピーし、2. トレーニング マニュアル ID を保存し、3. 関連するドキュメント ID のリストをテーブル a31 にコピーし、4. ドキュメントをテーブル a30 にコピーします。新しいトレーニング マニュアルを参照して、a30 の既存の重複をクエリでチェックし、そのままにしておいて、a31 にエントリを追加するにはどうすればよいですか?
SET @userid = <code type="user" />;
CREATE TEMPORARY TABLE `a1t` ENGINE=MEMORY SELECT * FROM `a36trnman` WHERE `unik` = '<input name="unik" hidden="y" />';
UPDATE a1t SET `unik` = NULL;
INSERT INTO `a36trnman` (SELECT * FROM `a1t`);
DROP TABLE `a1t`;
SET @lastid := LAST_INSERT_ID();
CREATE TEMPORARY TABLE `a1t` ENGINE=MEMORY SELECT * FROM `a31` WHERE `trnmannum` = '<input name="unik" hidden="y" />';
UPDATE a1t SET `pntryid` = NULL, `trnmannum` = @lastid;
INSERT INTO `a31` (SELECT * FROM `a1t`);
DROP TABLE `a1t`;
CREATE TEMPORARY TABLE `a30t` ENGINE=MyISAM SELECT docname, docfile, docfilepdf, ctgry, subctgry, id, creator, smmry FROM `a30` LEFT JOIN `a31` ON a30.id = a31.pdocid WHERE `trnmannum` = @lastid;
UPDATE a30t SET `id` = null, `creator` = @userid;
INSERT INTO `a30` (SELECT * FROM `a30t`);
DROP TABLE `a30t`;