2017-09-11 1 views
0

Ich habe die folgende Datenbank 2 Tabellen mit PK_Hash_ID in md5 Tabelle und FK_Hash_ID in Files Tabelle.Wenn die Datei nicht existiert Einfügen in eine Tabelle und andere Werte zum Einfügen in andere Tabelle

Hier kann zum Beispiel sagen, ich brauche neue Datensatz einfügen, zuerst muß ich überprüfen, ob sein md5hash in md5 ist nicht vorhanden, wenn es nicht die md5 und files hinzuzufügen, wenn es, dass Hash_ID und Einsatz übernehme md5 nur existieren es in files mit dem anderen valuse vom Benutzer genommen solche File_name, Parent_Path, DataType, etc

enter image description here

+0

Mögliches Duplikat [MySQL: Rekord Einfügen, wenn nicht in der Tabelle vorhanden ist] (https://stackoverflow.com/questions/3164505/mysql-insert-record-if- not-exists-in-table) – Dai

Antwort

0
BEGIN 

If EXISTS (SELECT Hash_ID from MD5 Where MD5Hash = MD5Hash1) 
Then 
SELECT @H := Hash_ID from md5 where MD5Hash = MD5Hash1; 
INSERT INTO MD5 Where MD5Hash = @H (Counter) values (+1); 
INSERT INTO files (Hash_ID , File_Name , Path, Parent_Path , DataType) 
values (@H, FileName,Path, ParentPath, Type); 
ELSE 
Insert INTO md5 (MD5Hash, Counter) VALUES (MD5Hash1,+1); 
SELECT @H := Hash_ID from md5 where MD5Hash = MD5Hash1; 


INSERT INTO files (Hash_ID , File_Name , Path, Parent_Path , DataType) 
values (@H, FileName,Path, ParentPath, Type); 
End IF ; 
end 

getan zu verwenden, wenn vorhanden,

0

Machen md5hash Spalte einzigartig in md5 Tabelle, von denen Sie sicher sein können, dass es niemals du sein Eintrag darin machen. Versuchen Sie, jedes MD5HASH in md5-Tabelle einzufügen. Wenn die Abfrage fehlschlägt, suchen Sie nach dem Fehlertyp, wenn der Fehler aufgrund der eindeutigen Schlüsseleinschränkung auftritt. Das bedeutet, dass HASH bereits existiert, wenn kein Fehler HASH in die Tabelle MD5 eingefügt wird. Beispielcode wäre wie

$sql = "insert into md5 values (null,'file_name',$hash)"; 
$result = mysqli_query($sql); 
if(mysql_errno() == 1062) { 
    //write the code which you want to execute in case of hash already existing 
} else { 
    //write the code where hash doesn't existed earlier, but now it has already added in database. No need to add again. 
} 

Ich hoffe, das half.

+0

In jedem Fall wird der files_tbl einen neuen Datensatz haben, nur der md5_tbl, den ich brauche, um sicherzustellen, dass nichts dubiiert wird, zum Beispiel, dass ich (file_name, Prent_Path, etc) zuerst iam überprüfen werde md5 tbl Wenn vorhanden, wenn es bereits existiert nimm den md5_Id den Rest der Daten in Files_tbl ein, in anderen Fällen, wenn dieses md5hash nicht existierte, füge es dem md5_tbl hinzu und nimm die ID wieder und füge die Daten in das files_tbl – Tobi

+0

Just mache die Spalte md5Hash uniq Ue. MySql kümmert sich um den Rest. Sie haben in allen Fällen den Wert von HASH, so dass Sie ihn nicht aus der Datenbank auswählen müssen. –

+0

krank versuchen Sie das sicher – Tobi

Verwandte Themen