prepare($sql); $stmt->bind_param("ssi", $start_date, $end_date, $limit); $stmt->execute(); return $stmt->get_result(); } /** * 获取产品销售趋势 * * @param mysqli $conn 数据库连接 * @param string $start_date 开始日期 * @param string $end_date 结束日期 * @param int $product_id 产品ID,为0时获取所有产品的总体趋势 * @param string $period 时间粒度 (day/week/month) * @return mysqli_result 产品销售趋势数据结果集 */ function getProductSalesTrend($conn, $start_date, $end_date, $product_id = 0, $period = 'month') { $groupFormat = '%Y-%m-%d'; if ($period == 'week') { $groupFormat = '%x-W%v'; // ISO year and week number } else if ($period == 'month') { $groupFormat = '%Y-%m'; } $sql = "SELECT DATE_FORMAT(o.order_date, '$groupFormat') as time_period, SUM(oi.quantity) as total_quantity, SUM(oi.total_price) as total_revenue, COUNT(DISTINCT o.id) as order_count FROM order_items oi JOIN orders o ON oi.order_id = o.id"; if ($product_id > 0) { $sql .= " WHERE o.order_date BETWEEN ? AND ? AND oi.product_id = ?"; } else { $sql .= " WHERE o.order_date BETWEEN ? AND ?"; } $sql .= " GROUP BY time_period ORDER BY MIN(o.order_date)"; $stmt = $conn->prepare($sql); if ($product_id > 0) { $stmt->bind_param("ssi", $start_date, $end_date, $product_id); } else { $stmt->bind_param("ss", $start_date, $end_date); } $stmt->execute(); return $stmt->get_result(); } /** * 获取产品类别销售分布 * * @param mysqli $conn 数据库连接 * @param string $start_date 开始日期 * @param string $end_date 结束日期 * @return mysqli_result 产品类别销售分布数据结果集 */ function getProductCategorySales($conn, $start_date, $end_date) { $sql = "SELECT pc.name as category_name, SUM(oi.quantity) as total_quantity, SUM(oi.total_price) as total_revenue, COUNT(DISTINCT o.id) as order_count FROM order_items oi JOIN products p ON oi.product_id = p.id JOIN product_categories pc ON p.category_id = pc.id JOIN orders o ON oi.order_id = o.id WHERE o.order_date BETWEEN ? AND ? GROUP BY p.category_id ORDER BY total_revenue DESC"; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $start_date, $end_date); $stmt->execute(); return $stmt->get_result(); } /** * 获取产品与地区关联分析 * * @param mysqli $conn 数据库连接 * @param string $start_date 开始日期 * @param string $end_date 结束日期 * @param int $limit 限制返回的产品-地区组合数量 * @return mysqli_result 产品与地区关联分析数据结果集 */ function getProductRegionAnalysis($conn, $start_date, $end_date, $limit = 10) { $sql = "SELECT p.ProductName, c.countryName, SUM(oi.quantity) as total_quantity, SUM(oi.total_price) as total_revenue FROM order_items oi JOIN products p ON oi.product_id = p.id JOIN orders o ON oi.order_id = o.id JOIN customer cu ON o.customer_id = cu.id JOIN country c ON cu.cs_country = c.id WHERE o.order_date BETWEEN ? AND ? GROUP BY oi.product_id, cu.cs_country ORDER BY total_revenue DESC LIMIT ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("ssi", $start_date, $end_date, $limit); $stmt->execute(); return $stmt->get_result(); } /** * 渲染热门产品表格 * * @param mysqli_result $top_products 热门产品数据 * @return void */ function renderTopProductsTable($top_products) { ?>

热门产品

fetch_assoc()): ?>
产品名称 销售数量 销售收入
¥

产品销售趋势

产品类别销售分布

产品地区关联分析

fetch_assoc()): ?>
产品名称 国家/地区 销售数量 销售收入
¥