2011-02-08 4 views
0

私はCodeIgniterのデータベースにcsvファイルの内容を書き込む小さなアプリケーションを書いていますが、書き込みの前にdupesをチェックするのは難しいです。これはかなり一般的な作業なので、私は専門家(あなた)がどのようにそれをやっているのだろうかと思っていました。 「!あなたが吸う」CodeIgniter:エントリの前に重複のDBテーブルをチェックするにはどうすればいいですか?

 $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 

     } 

のすべてで短い任意の入力:コンテキストと比較のために、ここで私の(現在は非稼働)のコードです(私はすでに、この時点で自分の脳から1時間に2回聞いています)大いに感謝します。ありがとう。まず

答えて

2

あなたのやっていることはうまくいくでしょうが、上記のように "== 0" "> 0"でなければなりません。

ます。また、そうのように、代わりにはsizeofを使ってのNUM_ROWS方法で構築CodeIgnitersを使用することができます。

$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

あなたはおそらくしたい(というより> 0)

if (sizeof($already_exists) == 0) { 
    //add to database 
} 

また、あなたはその後、いくつかの気の利いたSQLベースで一掃し、その後に押し戻すことができ、一時的なステージング表にすべてのデータを、プッシュするだけでしたステージングテーブル。

MySQLを使用して、あなたの上にパントを撮影する(どちらかそれかpostgresのあなたがphpingしている場合)あなたはこれを試みることができる(http://www.cyberciti.biz/faq/howto-removing-eliminating-duplicates-from-a-mysql-table/から取られた) あなたはあなたの主キー

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) 

にご.IDを変更する必要がありますsalesperson_temptableの内容を確認すると、営業担当者のテーブルに戻すことができます。

関連する問題