mirror of
https://github.com/FreshRSS/FreshRSS.git
synced 2026-05-05 13:44:43 -04:00
Simplify SQL in statistics
Reduce the use of product-specific date functions. Improve performances. Remove redundant functions.
This commit is contained in:
@@ -2,61 +2,6 @@
|
||||
|
||||
class FreshRSS_StatsDAOSQLite extends FreshRSS_StatsDAO {
|
||||
|
||||
/**
|
||||
* Calculates entry count per day on a 30 days period.
|
||||
* Returns the result as a JSON object.
|
||||
*
|
||||
* @return JSON object
|
||||
*/
|
||||
public function calculateEntryCount() {
|
||||
$count = $this->initEntryCountArray();
|
||||
$period = parent::ENTRY_COUNT_PERIOD;
|
||||
|
||||
// Get stats per day for the last 30 days
|
||||
$sql = <<<SQL
|
||||
SELECT round(julianday(e.date, 'unixepoch') - julianday('now')) AS day,
|
||||
COUNT(1) AS count
|
||||
FROM {$this->prefix}entry AS e
|
||||
WHERE strftime('%Y%m%d', e.date, 'unixepoch')
|
||||
BETWEEN strftime('%Y%m%d', 'now', '-{$period} days')
|
||||
AND strftime('%Y%m%d', 'now', '-1 day')
|
||||
GROUP BY day
|
||||
ORDER BY day ASC
|
||||
SQL;
|
||||
$stm = $this->bd->prepare($sql);
|
||||
$stm->execute();
|
||||
$res = $stm->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
foreach ($res as $value) {
|
||||
$count[(int) $value['day']] = (int) $value['count'];
|
||||
}
|
||||
|
||||
return $this->convertToSerie($count);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates entry average per day on a 30 days period.
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function calculateEntryAverage() {
|
||||
$period = self::ENTRY_COUNT_PERIOD;
|
||||
|
||||
// Get stats per day for the last 30 days
|
||||
$sql = <<<SQL
|
||||
SELECT COUNT(1) / {$period} AS average
|
||||
FROM {$this->prefix}entry AS e
|
||||
WHERE strftime('%Y%m%d', e.date, 'unixepoch')
|
||||
BETWEEN strftime('%Y%m%d', 'now', '-{$period} days')
|
||||
AND strftime('%Y%m%d', 'now', '-1 day')
|
||||
SQL;
|
||||
$stm = $this->bd->prepare($sql);
|
||||
$stm->execute();
|
||||
$res = $stm->fetch(PDO::FETCH_NAMED);
|
||||
|
||||
return round($res['average'], 2);
|
||||
}
|
||||
|
||||
protected function calculateEntryRepartitionPerFeedPerPeriod($period, $feed = null) {
|
||||
if ($feed) {
|
||||
$restrict = "WHERE e.id_feed = {$feed}";
|
||||
|
||||
Reference in New Issue
Block a user