Как вывести сумму значений из MySQL в общую таблицу?

Подробное руководство: Как вывести сумму значений из MySQL в таблицу на PHP

1. Подключение к базе данных MySQL

Первым шагом необходимо установить соединение с базой данных:

<?php
$servername = "localhost";
$username = "ваш_пользователь";
$password = "ваш_пароль";
$dbname = "ваша_база_данных";

// Создаем соединение
$conn = new mysqli($servername, $username, $password, $dbname);

// Проверяем соединение
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
?>

2. SQL-запрос для получения суммы

Для вычисления суммы в MySQL используется агрегатная функция SUM():

<?php
// Пример 1: Сумма всех значений в столбце
$sql = "SELECT SUM(column_name) as total_sum FROM table_name";

// Пример 2: Сумма с условием WHERE
$sql = "SELECT SUM(column_name) as total_sum FROM table_name WHERE condition_column = 'value'";

// Пример 3: Сумма с группировкой
$sql = "SELECT category, SUM(amount) as category_sum FROM sales GROUP BY category";

// Пример 4: Сумма нескольких столбцов
$sql = "SELECT SUM(column1) as sum1, SUM(column2) as sum2 FROM table_name";
?>

3. Полный пример с выводом в таблицу

<?php
// Подключение к базе данных
$conn = new mysqli("localhost", "username", "password", "database");

// Проверка соединения
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// SQL запрос для получения суммы
$sql = "SELECT SUM(salary) as total_salary, 
               SUM(bonus) as total_bonus,
               COUNT(*) as employee_count 
        FROM employees";

$result = $conn->query($sql);

if ($result->num_rows > 0) {
    $row = $result->fetch_assoc();
    
    // Создаем HTML таблицу
    echo "<table border='1' style='border-collapse: collapse; width: 100%;'>";
    echo "<tr style='background-color: #f2f2f2;'>";
    echo "<th>Показатель</th>";
    echo "<th>Значение</th>";
    echo "</tr>";
    
    echo "<tr>";
    echo "<td>Общая сумма зарплат</td>";
    echo "<td>" . number_format($row['total_salary'], 2) . " руб.</td>";
    echo "</tr>";
    
    echo "<tr>";
    echo "<td>Общая сумма бонусов</td>";
    echo "<td>" . number_format($row['total_bonus'], 2) . " руб.</td>";
    echo "</tr>";
    
    echo "<tr>";
    echo "<td>Количество сотрудников</td>";
    echo "<td>" . $row['employee_count'] . "</td>";
    echo "</tr>";
    
    echo "</table>";
} else {
    echo "Нет данных для отображения";
}

$conn->close();
?>

4. Пример с группировкой данных

<?php
// Подключение к базе данных
$conn = new mysqli("localhost", "username", "password", "database");

// SQL запрос с группировкой
$sql = "SELECT department, 
               SUM(salary) as dept_salary,
               AVG(salary) as avg_salary,
               COUNT(*) as emp_count 
        FROM employees 
        GROUP BY department 
        ORDER BY dept_salary DESC";

$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "<table border='1' style='border-collapse: collapse; width: 100%;'>";
    echo "<tr style='background-color: #4CAF50; color: white;'>";
    echo "<th>Отдел</th>";
    echo "<th>Сумма зарплат</th>";
    echo "<th>Средняя зарплата</th>";
    echo "<th>Количество сотрудников</th>";
    echo "</tr>";
    
    while($row = $result->fetch_assoc()) {
        echo "<tr>";
        echo "<td>" . htmlspecialchars($row['department']) . "</td>";
        echo "<td>" . number_format($row['dept_salary'], 2) . " руб.</td>";
        echo "<td>" . number_format($row['avg_salary'], 2) . " руб.</td>";
        echo "<td>" . $row['emp_count'] . "</td>";
        echo "</tr>";
    }
    
    echo "</table>";
} else {
    echo "Нет данных для отображения";
}

$conn->close();
?>

5. Безопасная версия с подготовленными выражениями

<?php
// Подключение к базе данных
$conn = new mysqli("localhost", "username", "password", "database");

// Подготовленный запрос с параметром
$stmt = $conn->prepare("SELECT category, SUM(amount) as total 
                       FROM sales 
                       WHERE date >= ? 
                       GROUP BY category");
$start_date = "2024-01-01";
$stmt->bind_param("s", $start_date);
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    echo "<table border='1'>";
    echo "<tr><th>Категория</th><th>Общая сумма</th></tr>";
    
    while($row = $result->fetch_assoc()) {
        echo "<tr>";
        echo "<td>" . htmlspecialchars($row['category']) . "</td>";
        echo "<td>" . number_format($row['total'], 2) . " руб.</td>";
        echo "</tr>";
    }
    
    echo "</table>";
}

$stmt->close();
$conn->close();
?>

6. Дополнительные возможности

Сумма с вычисляемыми полями:

$sql = "SELECT SUM(price * quantity) as total_revenue FROM orders";

Сумма с объединением таблиц:

$sql = "SELECT c.category_name, SUM(p.price * s.quantity) as total_sales
        FROM sales s
        JOIN products p ON s.product_id = p.id
        JOIN categories c ON p.category_id = c.id
        GROUP BY c.category_name";

7. Обработка ошибок и лучшие практики

<?php
// Обработка ошибок
try {
    $conn = new mysqli("localhost", "username", "password", "database");
    
    if ($conn->connect_error) {
        throw new Exception("Connection failed: " . $conn->connect_error);
    }
    
    $sql = "SELECT SUM(amount) as total FROM transactions";
    $result = $conn->query($sql);
    
    if (!$result) {
        throw new Exception("Query failed: " . $conn->error);
    }
    
    // ... вывод таблицы ...
    
} catch (Exception $e) {
    echo "Ошибка: " . $e->getMessage();
} finally {
    if (isset($conn)) {
        $conn->close();
    }
}
?>

Ключевые моменты:

  1. Безопасность: Всегда используйте подготовленные выражения для запросов с параметрами
  2. Валидация: Проверяйте наличие данных перед выводом
  3. Форматирование: Используйте number_format() для красивого отображения чисел
  4. Обработка ошибок: Всегда обрабатывайте возможные ошибки соединения и запросов
  5. Закрытие соединения: Всегда закрывайте соединение с базой данных после использования

Этот подход позволяет безопасно и эффективно работать с суммами данных из MySQL и красиво отображать их в таблицах на PHP.