Я пишу сценарий PHP, который выполняется на cron и извлекает данные JSON из API [title (text), path (text), посетителей (integer)] и сохраняет их в базе данных SQLite. Каждый раз, когда он запускается, если он видит существующий заголовок, он должен добавлять количество новых посетителей к существующим посетителям. Если нет, следует добавить новые данные в виде новой строки.
Вот упрощенный взгляд на мой цикл:
foreach($results as $printresults) {
//this iterates though $title, $path and $visitors
$existing_visitors = $db->query("SELECT SUM(visitors) FROM topten WHERE
title='$title'");
while ($existing_vis_row = $existing_visitors->fetch(SQLITE_NUM)) {
$dupe_enter = $db->query("UPDATE topten SET title='$title', path='$path',
visitors='$existing_vis_row[0]' WHERE title='$title' ");
}
$db->query("INSERT INTO topten (id,title,path,visitors,time) VALUES
(NULL, '$title', '$path', '$visitors', '$time');");
}
Тогда я сделаю SELECT
, чтобы вытянуть DISTINCT
ряды, упорядоченные посетителями, и запишу это в файл. Поскольку запрос UPDATE
добавляет всех посетителей в эти строки, не имеет значения, что будут все дубликаты. По истечении определенного времени я отброшу всю таблицу и снова начну собирать, чтобы файл не стал слишком громоздким.
Проблема в том, что он добавляет суммированные подсчеты посетителей на каждом проходе цикла, что делает подсчет посетителей совершенно неожиданным. Но я не мог найти лучший способ просто добавлять данные вместе при каждом запуске скрипта.