要使用 PHP exec
函数处理用户留存率,您需要首先确定如何计算用户留存率。用户留存率通常是指在特定时间段内新用户中有多少百分比在后续时间段内仍然在使用产品或服务。
假设您有一个数据库表,其中包含以下字段:
user_id
:用户的唯一标识符created_at
:用户注册日期和时间retained_at
:用户首次进行有价值互动(例如购买、订阅等)的日期和时间要计算用户留存率,您可以使用以下 SQL 查询:
SELECT
DATE(created_at) AS date,
COUNT(DISTINCT user_id) AS new_users,
COUNT(DISTINCT CASE WHEN retained_at IS NOT NULL THEN user_id END) AS retained_users,
(COUNT(DISTINCT CASE WHEN retained_at IS NOT NULL THEN user_id END) / COUNT(DISTINCT user_id)) * 100 AS retention_rate
FROM
users
GROUP BY
DATE(created_at)
ORDER BY
DATE(created_at);
然后,您可以使用 PHP 的 exec
函数执行此查询并处理结果。以下是一个示例:
<?php
// 数据库连接信息
$host = 'localhost';
$db = 'your_database';
$user = 'your_username';
$pass = 'your_password';
$charset = 'utf8mb4';
// 创建 PDO 连接
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, $user, $pass, $options);
// 执行 SQL 查询
$sql = "
SELECT
DATE(created_at) AS date,
COUNT(DISTINCT user_id) AS new_users,
COUNT(DISTINCT CASE WHEN retained_at IS NOT NULL THEN user_id END) AS retained_users,
(COUNT(DISTINCT CASE WHEN retained_at IS NOT NULL THEN user_id END) / COUNT(DISTINCT user_id)) * 100 AS retention_rate
FROM
users
GROUP BY
DATE(created_at)
ORDER BY
DATE(created_at);
";
$stmt = $pdo->query($sql);
// 处理查询结果
$retentionRates = [];
while ($row = $stmt->fetch()) {
$date = $row['date'];
$newUsers = $row['new_users'];
$retainedUsers = $row['retained_users'];
$retentionRate = $row['retention_rate'];
// 将结果存储到数组中
$retentionRates[$date] = [
'new_users' => $newUsers,
'retained_users' => $retainedUsers,
'retention_rate' => $retentionRate,
];
}
// 输出结果
foreach ($retentionRates as $date => $data) {
echo "Date: $date\n";
echo "New Users: {$data['new_users']}\n";
echo "Retained Users: {$data['retained_users']}\n";
echo "Retention Rate: {$data['retention_rate']}%\n\n";
}
?>
请注意,这个示例使用了 PDO 来连接数据库并执行查询。您可以根据您的实际情况使用其他数据库扩展(如 mysqli)或数据库抽象库(如 Doctrine)。