我正在编写一个小应用程序,它将csv文件的内容写入CodeIgniter中的数据库,但是在写入之前我很难检查dupes。由于这是一项相当普遍的任务,我想知道一些专业人士(你)是如何做到这一点的。对于上下文和比较,这是我的(当前不工作的)代码:
$sql = "SELECT * FROM salesperson WHERE salesperson_name='" . $csvarray['salesperson_name'][$i] . "'";
$already_exists = $this->db->query($sql);
if (sizeof($already_exists) > 0) {
//add to database
}
任何输入完全没有“你糟透了!” (我已经在这一点上每小时听到两次我的大脑)将不胜感激。感谢。
答案 0 :(得分:2)
你正在做的事情会起作用,但如上所述,比较应该是“== 0”而不是“> 0”。
您也可以使用内置num_rows方法的CodeIgniters而不是使用sizeof,如下所示:
$sql = "your query";
$query = $this->db->query($sql);
if ($query->num_rows() == 0) {
// no duplicates found, add new record
}
作为旁注,如果您正在使用CodeIgniter,那么使用Active Record构建查询而不是编写SQL是值得的。您可以在此处了解详情:CodeIgniter - Active Record
答案 1 :(得分:1)
首先你可能想要(而不是> 0)
if (sizeof($already_exists) == 0) {
//add to database
}
也可以将所有数据推送到一个临时的临时表,然后你可以用一些漂亮的sql清理 - 然后再推回到你的临时表。
使用mysql(或者如果你是phping的那个或者postgres)你可以试试这个(取自http://www.cyberciti.biz/faq/howto-removing-eliminating-duplicates-from-a-mysql-table/) 您必须将.ID更改为主键
delete from salesperson_temptable
USING salesperson_temptable, salesperson_temptable as vtable
WHERE (NOT salesperson_temptable.ID=vtable.ID)
AND (salesperson_temptable.salesperson_name=vtable.salesperson_name)
然后当您查看salesperson_temptable的内容时,您可以将其重新插入到销售员表中