Как избежать добавления избыточных данных в таблицу SQLite с помощью php? - PullRequest
1 голос
/ 19 июня 2019

Я работаю над кодом php, как показано ниже, в котором перечислены все mp4 файлы , представленные в $ src_dir .

$src_dir = ('\\\ABCD-ST-001\Audio_Test\podcast\incoming_folder'); 

$mp4_files = preg_grep('~\.(mp4)$~', scandir($src_dir));

print_r(array_values($mp4_files));  // LineA

Вот O / P , полученное из Строка # A :

Array ( [0] => 36031P.mp4 [1] => hello.mp4 )

Теперь я использовал следующий скрипт в своем php-коде, чтобы вставить эти mp4-файлы в таблицу Podcast_Export.

    foreach ($mp4_files as $value) {
        $db->exec(SELECT COUNT(*) FROM Podcast_Export WHERE House# = '".$value."' AND status = 'GO');
        $db->exec("INSERT INTO Podcast_Export ('House_number', 'Status') VALUES ('".$value."', 'Go')");    // Line B
    }

Приведенный выше скрипт добавляет следующие данные в таблицу Podcast_Export:

36031.mp4 Go
hello.mp4 Go

Постановка задачи:

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что когда я обновляю страницу, сценарий на LineB запускается снова, а файлы mp4, присутствующие в $ src_dir , снова добавляются в таблицу Podcast_Export, как показано ниже :

36031.mp4 Go
hello.mp4 Go
36031.mp4 Go
hello.mp4 Go

Это должно работать так, как только новый файл появится внутри $ src_dir , тогда он должен добавить в таблицу Podcast_Export. Предположим, что новый файл hxz210.mp4 , а затем содержимое таблицы Podcast_Export должно быть:

36031.mp4  Go
hello.mp4  Go
hxz210.mp4 Go

1 Ответ

0 голосов
/ 19 июня 2019

Ваш выбор в порядке, но вам нужно сохранить результат в переменную, такую ​​как:

$count = $db->querySingle("SELECT COUNT(*) as count FROM Podcast_Export WHERE House_number = '".$value."'"); 
if($count <= 0){ 
    $db->exec("INSERT INTO Podcast_Export (House_number,Status) 
               VALUES ('".$value."', 'Go')");
}

Использование querySingle для получения количества строк в SQLite.

обратите внимание, что я изменил House# на House_number здесь и удалил предложение AND status = 'GO', так как все они имеют статус GO.

...