Как я могу получить данные из базы данных, отсортированные по группам?

Как изменить запрос `selectAll1` написанный на языке PHP для избежания дублирования столбца `department` при выводе данных из базы данных с использованием цикла `foreach`? Вам доступны таблицы `filial_work`, `department_work`, `position`, `number_work` и `contact_work` в базе данных.
  • 10 июля 2024 г. 8:42
Ответы на вопрос 2
Для получения данных из базы данных, отсортированных по группам, вы можете использовать оператор SQL `ORDER BY`. Например, если вы хотите отсортировать данные по столбцу `department`, запрос может выглядеть так:

```sql
SELECT * FROM your_table_name ORDER BY department;
```

Чтобы изменить запрос `selectAll1` на языке PHP для избежания дублирования столбца `department`, вы можете использовать цикл `foreach` и массив, который будет содержать уникальные значения `department`.

Примерно так может выглядеть ваш обновленный код на PHP:

```php
<?php
// Ваш исходный запрос selectAll1
$query = "SELECT * FROM your_table_name";

// Выполняем запрос и получаем данные
$result = mysqli_query($connection, $query);

// Создаем массив для хранения уникальных значений department
$departments = array();

// Обрабатываем результат запроса с помощью цикла foreach
while($row = mysqli_fetch_assoc($result)) {
    // Проверяем, был ли уже такой department в массиве
    if (!in_array($row['department'], $departments)) {
        // Если нет, добавляем его в массив и выводим данные
        $departments[] = $row['department'];
        echo 'Department: ' . $row['department'] . '<br>';
        // Выводите остальные данные, если необходимо
        echo 'Other columns: ' . $row['other_column'] . '<br>';
    }
}
?>
```

Этот код будет выводить данные из базы данных, отсортированные по `department`, и избегать дублирования значений этого столбца.
Я только недавно начал изучать программирование

Это очень похвально. Только ради бога, учите его по нормальным учебникам, а не по видеокурсам, которые делали неграмотные дети на мамкином ноутбуке.
Поскольку вы используете PDO, то можете сразу получить трехмерный массив, сгруппированный по одному полю
function listContactsByDepartment ($pdo){
    $sql = "SELECT 
    t3.department, -- обращаем внимание на эту строчку. Она должна быть первой
    t1.id,
    t1.full_name,
    t1.email_user,
    t1.tel_number,
    t2.filial,
    t3.department_email,
    t4.position,
    t5.number
    FROM contact_work AS t1 INNER JOIN filial_work AS t2  ON t1. id_filial = t2.id 
    INNER JOIN department_work AS t3 ON t1. id_department = t3.id
    INNER JOIN position AS t4 ON t1. id_position = t4.id
    INNER JOIN number_work AS t5 ON t1. id_number = t5.id
    ORDER BY `t2`.`filial` ASC , `t3`.`department` DESC ";
    return $pdo->query($sql)->fetchAll(PDO::FETCH_GROUP); # Обращаем внимание на эту константу
}
$contacts = listContactsByDepartment ($pdo);

Из этой функции вы получите трехмерный массив, который выводится двумя вложенными циклами
<?php foreach($contacts as $department_title => $department_contacts): ?>
                      <tr>
                        <td colspan=10><?=htmlspecialchars($department_title) ?>
                      <tr>
    <?php foreach($department_contacts as $row): ?>
                      <tr>
                        <td><?=htmlspecialchars($row['filial']) ?></td>
                        ...
                      </tr>
    <?php endforeach ?>
<?php endforeach ?>
Похожие вопросы