2014-09-02 57 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;