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

Как изменить запрос `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`, и избегать дублирования значений этого столбца.
<blockquote>Я только недавно начал изучать программирование</blockquote> <br/> Это очень похвально. Только ради бога, учите его по нормальным учебникам, а не по видеокурсам, которые делали неграмотные дети на мамкином ноутбуке. <br/> Поскольку вы используете PDO, то можете сразу получить трехмерный массив, сгруппированный по одному полю <br/> <pre><code class="php">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-&gt;query($sql)-&gt;fetchAll(PDO::FETCH_GROUP); # Обращаем внимание на эту константу
}
$contacts = listContactsByDepartment ($pdo);</code></pre> <br/> Из этой функции вы получите трехмерный массив, который выводится двумя вложенными циклами <br/> <pre><code class="php">&lt;?php foreach($contacts as $department_title =&gt; $department_contacts): ?&gt;
                      &lt;tr&gt;
                        &lt;td colspan=10&gt;&lt;?=htmlspecialchars($department_title) ?&gt;
                      &lt;tr&gt;
    &lt;?php foreach($department_contacts as $row): ?&gt;
                      &lt;tr&gt;
                        &lt;td&gt;&lt;?=htmlspecialchars($row['filial']) ?&gt;&lt;/td&gt;
                        ...
                      &lt;/tr&gt;
    &lt;?php endforeach ?&gt;
&lt;?php endforeach ?&gt;</code></pre>
Похожие вопросы