2014-09-02 46 views
0

以下是我正在使用的從csv文件導入數據的查詢,並忽略僅存在於數據庫中的那些行(以避免重複)。現在我想要得到的僅僅是那些在數據庫中已經存在的行被忽略的計數,請讓我知道如何得到這個計數?獲取重複行數

$con->query("LOAD DATA Local INFILE 'CSVFILEPATH' IGNORE INTO TABLE DUPLICATES FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES") 
+0

一個簡單的計算:(數據行數在csv中) - (行數在表中) – Rimas 2014-09-02 20:38:19

+0

我這樣做了:'$ file_read = file($ csv_name,FILE_SKIP_EMPTY_LINES); $ file_read_count = count($ file_read);' – user3027531 2014-09-02 21:14:14

+0

這是有點不清楚,但可以在找到重複項之前將CSV文件加載到表中嗎? – 2014-09-02 21:24:33

回答

0

我看到的只有一種解決方法,就是對錶中的記錄進行計數,並與文件中的記錄數進行比較。

簡單的查詢來計算記錄數表:

$q = $conn->query("SELECT COUNT(*) as cnt FROM DUPLICATES"); 
$f = $q->fetch(); 
$linesInTable = $f['cnt']; 

要統計文件,你可以使用shell命令行數。

的Linux:

$linesInFile = trim(`cat 'CSVFILEPATH'|wc -l`); 

的Windows:

$linesInFile = trim(`Find /V /C "" < CSVFILEPATH`); 

現在計算重複記錄:

$duplicatedLines = $linesInFile - $linesInTable; 
-1

至表計算總的唯一行,你可以使用SQL查詢

SELECT COUNT(DISTINCT column_name) FROM table_name;