2016-09-09 3 views
1

私は、MS AccessからMySqlデータベースへの出席者ログの取得に取り組んでいます。 私はMS Access DatasourceとMySql Databaseへのアップロードから自動的に新しいレコードを取得/取得したいと思っています(自動的に推奨されます)。 attendance、構造的にファイナルテーブルとまったく同じであることattendance_temp、一時テーブルを使用することを検討してODBCドライバを使用してMS AccessからMySqlへの新しいレコードのみを自動挿入する方法はありますか?

<?php 
// Connect to MySql Local Database 
$con = mysqli_connect("localhost", "root", ""); 

// Connect to Microsoft Access Using ODBC Driver 
$connection = odbc_connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\Program Files (x86)\ZKTeco\att2000.mdb", "", ""); 

// Check if Connect works 
if($connection){ 
    echo odbc_autocommit($connection); 
    $QUERY = odbc_exec($connection, "SELECT * FROM `CHECKINOUT`") or die(odbc_error($connection)); 


//If have records in MS Access Data Source 
     if(odbc_fetch_row($QUERY) > 0){ 
      while ($ATT = odbc_fetch_array($QUERY)) { 
       $result = $ATT["CHECKTIME"]; 

      // Here I want to Insert only New Records from MS Access 

      $INSERT = mysqli_query($con, "INSERT INTO `odbc`.`attendance` (`DATETIME`, `DATE`, `TIME`) VALUES ('$result', '$result', '$result')") or die(mysqli_error($con)); 
     } 
    } 
    echo odbc_commit($connection); 
}else{ 
    echo "False"; 
} 
?> 
+1

まず、コードで何が動作していないのかを説明する必要があります。その後、これがOneshot操作であれば、PHPの代わりにMS Accessからこれを行う方がはるかに簡単です。 –

+0

新しいレコードは何を定義しますか?あなたは本当に重複しないレコードを意味しますか? – Parfait

+0

@Parfaitはい、私はこのフォームを提出するたびにレコードを複製するので、重複したレコードは必要ありません。 –

答えて

2

が、定期的にスクリプトを実行するたびに一掃されています:以下 は私の現在のコードで、助けてください

mysqli_query($con, "DELETE FROM `odbc`.`attendance_temp`"); # OUTSIDE WHILE LOOP 
... 
$INSERT = mysqli_query($con, 
         "INSERT INTO `odbc`.`attendance_temp` (`DATETIME`, `DATE`, `TIME`) 
         VALUES ('$result', '$result', '$result')") 
一時テーブルが読み込まれたら

、そして最終的に、先テーブル内の重複レコードを避けるために、ファイナルテーブルに一時からNOT IN/NOT EXISTS/LEFT JOIN...IS NULLクエリを実行します。

INSERT INTO odbc.`attendance` (`DATETIME`, `DATE`, `TIME`) 
SELECT t.`DATETIME`, t.`DATE`, t.`TIME` 
FROM `odbc`.`attendance_temp` t 
LEFT JOIN `odbc`.`attendance` f 
ON t.`DATETIME` = f.`DATETIME` 
WHERE f.`DATETIME` IS NULL; 
関連する問題