私はcron上で動作し、API [タイトル(テキスト)、パス(テキスト)、訪問者(整数)]からJSONデータを取り出してSQLiteデータベースに保存するPHPスクリプトを作成しています。それが実行されるたびに、既存のタイトルが表示されている場合は、新しい訪問者の数を既存の訪問者に追加する必要があります。そうでない場合は、新しいデータを新しい行として追加する必要があります。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');");
}
その後、私は訪問者が注文したDISTINCT
行を引っ張ると、ファイルにこれを書くためにSELECT
をやります。 UPDATE
クエリはすべての訪問者をこれらの行に追加するので、すべてのダイプが存在することは重要ではありません。特定のタイムアウトでは、テーブル全体をドロップして再び収集を開始するので、ファイルが扱いにくくなりません。
問題は、ループの各パスに合計訪問者数を加算して、訪問者が完全に数えてしまうことです。しかし、スクリプトが実行されるたびにデータを単に追加するより良い方法は見つけられませんでした。
あなたは私のためにそれをちょっと黙らせることができますか?私はSQLであまり良くはありません。 JSONの言及も削除されました。 –