2013-11-11 5 views
0

каждый день Я получаю xml-файл, из которого можно экстраполировать (с php) набор данных (около тысячи записей) и запомнить их в mysql (так что все в порядке).php e query with if else

Для простоты предположим, что файл XML содержит следующие поля:

date (AAAAMMDD) ; 
replace ('S','N'); 
progressive (1,2,... n); 
field 1 ; 
field 2 ; 
.... 
field n; 

и что таблица MySQL выглядит следующим образом:

id; 
date; 
substitution; 
progressive ; 
field1 ; 
field2 ; 
.... 
fieldn; 

В файле XML, если у меня есть поле замены = 'S' означает, что файл заменяет файл, отправленный ранее, и прогрессивный указывает версию (может получить больше замен).

Теперь я хотел бы, чтобы справиться с этим следующим образом:

1. if data != '$date' then insert in MySQL 
2. if data = '$data' and replace = 'S' and progressive > $progressive then update 
3. if data = '$data' and replace = 'S' and progressive <= $progressive then go out 

Для пункта 1 все в порядке, но я не могу справиться с 2 и 3. Не могли бы вы мне помочь? Спасибо всем.

ответ

0

Если предположить, что должен существует только одна запись для данной даты в вашей БД должно быть:

$stmt = $pdo->prepare("SELECT COUNT(*) as cnt FROM [tablename] WHERE date = :date"); 
$stmt->bindValue(':date',$date); 
$stmt->execute(); 
$res = $stmt->fetch(); 

if($res['cnt'] > 0) { 
    if($replace == 'S') { 

     $query = 'UPDATE [tablename] SET [fields_to_update] WHERE date = :date AND progressive > :progressive'; 
     $stmt = $pdo->prepare($query); 
     $stmt->bindValue(':date',$date); 
     $stmt->bindValue(':progressive',$progressive, PDO::PARAM_INT); 
     $stmt->execute(); 

    } else { 
     // do nothing because you have an entry that should not be updated 
    } 
} else { 
    $query = 'INSERT INTO [tablename] ...'; 
    $stmt = $pdo->prepare($query); 
    $stmt->execute(); 
} 
+0

Стивен, В моем случае, я должен делать: если (замените $ == «S») { $ query = 'UPDATE [tablename] SET [fields_to_update] WHERE date =' $ date 'AND progressive> $ progressive'; else $ query = 'insert ....'; } верный? –

+0

нет действительно. Когда '($ replace! = 'S')' это не всегда 'insert'. Это вставка, если данные не существуют в db, не так ли? Также будьте осторожны с 'WHERE date = '$ date' AND progressive> $ progressive'', потому что дата не является вашим основным ключом, я думаю. Используйте свой первичный ключ для 'where', если у вас более одной записи с той же датой. – steven