Files
FloatBackOfffice/CRONS/weather/remove_duplicated_weather_data_in_weather_table.php
dev-chiefworks f76abffdcd first commit
2022-05-31 16:21:53 -04:00

101 lines
2.8 KiB
PHP

<?php
/**
* The purpose of this script: Remove duplicated weather records in weather table. (Remove duplicated records, only keep lowest weather id)
* Keep in mind: Don't deleted records exisiting in trip_weather table.
*/
echo "[".date("Y-m-d H:i:s")."] script is starting.\n";
require('../../backend.php');
$db_host = $savvyext->cfgReadChar('database.host');
$db_name = $savvyext->cfgReadChar('database.name');
$db_user = $savvyext->cfgReadChar('database.user');
$db_pass = $savvyext->cfgReadChar('database.pass');
$db_port = $savvyext->cfgReadLong('database.port');
$connstr = "host=${db_host} port=${db_port} dbname=${db_name} user=${db_user} password=${db_pass}";
$con = pg_connect($connstr) or die ("Could not connect to server\n");
$query = "
SELECT
date,
time,
latitude,
longitude,
min(id) as lowest_weather_id,
COUNT(*) as count
FROM
weather
WHERE
id NOT IN (
SELECT DISTINCT weather_id
FROM
trip_weather
)
GROUP BY
date,
time,
latitude,
longitude
HAVING COUNT(*) > 1;
";
$rs = pg_query($con, $query) or die("Cannot execute query: $query\n");
$rows = pg_num_rows($rs);
if ($rows == 0) {
echo "[".date("Y-m-d H:i:s")."] Does not any records to delete.\n";
} else {
while ($row = pg_fetch_assoc($rs)) {
$date = $row['date'];
$time = $row['time'];
$lat = $row['latitude'];
$long = $row['longitude'];
$duplicated_row_num = $row['count'];
$lowest_weather_id = $row['lowest_weather_id'];
removeDuplicatedWeatherData($date, $time, $lat, $long, $duplicated_row_num, $lowest_weather_id);
}
}
pg_close($con);
echo "[".date("Y-m-d H:i:s")."] Script completed.\n";
/********************* FUNCTIONs ************************* */
function removeDuplicatedWeatherData(string $date, string $time, string $lat, string $long, int $duplicated_row_num, int $lowest_weather_id)
{
global $con;
$query = "
DELETE FROM weather a
WHERE a.id IN (
SELECT
id
FROM
weather
WHERE
date = '" . $date . "'
AND time = '" . $time . "'
AND latitude = '" . $lat . "'
AND longitude = '" . $long . "'
AND id NOT IN (
SELECT
DISTINCT weather_id
FROM
trip_weather
)
)
AND a.id <> $lowest_weather_id
";
pg_query($con, $query) or die("Cannot execute query: $query\n");
$deleted_row_num = $duplicated_row_num - 1;
echo "[".date("Y-m-d H:i:s")."] Deleted $deleted_row_num records with date = $date, time = $time, COOR = ($lat, $long).\n";
}
?>