我有3個表格用作培訓文檔,文檔表格(a30),培訓手冊表格的歸檔機制,該表格存儲標題和ID不同的培訓手冊(a36trnman)以及用於存儲與不同手冊(a31)相關的文檔的ID的表格。如何將記錄複製到表格中,但是如果它們已經存在,則不能這樣做
在我的應用程序中,我允許用戶複製培訓手冊及其相關文檔,並使其成爲自己的。然而,我遇到了一個問題,因爲不同的培訓手冊可能包含相同的文檔,然後現在在培訓手冊中(他們可能已經修改過,並且希望保留),該文檔會有重複。因此,我需要一個重複的培訓手冊查詢,用於檢查是否已爲該用戶存在正在複製的手冊中的文檔,如果存在,則將其保留就位,並在表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.然後複製列表到表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`;
在我的文檔表中有一個唯一的id,它的'a30.id'列。 – Nat
如果它是唯一的,那麼爲什麼在複製時將它設置爲null並重新生成?我說你需要一個在所有「副本」中唯一的標識符。您正在創建重複項目因爲「FredBlogg」文檔在一個地方的ID爲1,另一個地方的ID爲2。它是重複的,但它的ID不是。 –
gotcha。我會玩這個! – Nat