2017-10-06 9 views
-2

mysqlには、レコードがデータベースに存在するかどうかにかかわらず、複数の列インデックスに基づいてインポートされたデータではなく、csvデータをMySQLにインポートする際に3つのロジックを導入する必要があります

例:名前+ UIDがデータベースに存在し、他のUIDを持つ名前がインポート中に存在するが、インポートしているいくつかの名前+ UIDが含まれていない場合、データベース内のレコードを更新

データベース。

もしそうでなければ、名前が一致するUIDコンボのレコードを更新する定期的にクエリを実行する方が簡単かもしれませんが、新しく作成された日付のレコードや他のUIDの更新日があります。あなたは、このデータベースは、これらの二つの組み合わせがDuplicate Keyになることを知っていることを確認しますUniqueIDNameに一意のインデックスを置くことによって開始する

答えて

0

ようになり、私は終わりました比較的単純な方法でこれを行う。それは、私はまだ誰かがMySQLでこれを行うより簡単で効率的な方法を持っているかどうかを知ることに興味があります(MariaDB 5.7)

私はホスト+ CVEで複写を捕捉するインデックスを持っています。私もcreateDate列とupdateDate列を持っています。 createDateはインポート時に自動的に更新され、updateDateはインポート時に自動的に更新されます。レコードupdateDateが以下のインポートプロセス中に発生した場合を除きます(GUIでレコードに実際に最後に触れた時刻を記録します)。

LOAD DATA LOCAL INFILE '/tmp/Example.csv' INTO TABLE ExampleImport 
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES; 

INSERT INTO ExampleTable (PluginID,CVE,CVSS,Risk,Host,Protocol,Port,Name,Synopsis,Description,Solution,SeeAlso,PluginOutPut) 
SELECT PluginID, CVE, CVSS, Risk, Host, Protocol, Port, Name, Synopsis, Description, Solution, SeeAlso, PluginOutput 
FROM ExampleImport 
ON DUPLICATE KEY UPDATE ImportDate = CURRENT_TIMESTAMP, UpdateDate = UpdateDate; 

UPDATE ExampleTable x4 
INNER JOIN (SELECT Host, MAX(UpdateDate) MaxDate 
     FROM ExampleTable 
     GROUP BY Host 
     ) x2 ON x4.Host = x2.Host 
SET FixDate = CURDATE(), x4.UpdateDate = x4.UpdateDate 
WHERE x4.UpdateDate < x2.MaxDate; 
0

、あなたのPDOは

INSERT INTO `myTbl` (`UniqueID`,`Name`,`FixedDate`) 
VALUES :UniqueID, :Name, :FixedDate 
ON DUPLICATE KEY UPDATE `FixedDate` = VALUES(FixedDate) 
+0

うーん、私には両方のファイルが名+ UIDが含まれている場合、それは一定の日付を更新してしまうように、これは見えますが、私は唯一のインポートが存在する名+ UIDを持っていない場合は、固定の日付を更新したいですデータベースに格納されます。スキャン結果の修復を考える – wahyzcrak

関連する問題