@sibspace

Как вывести данные из MSQL при помощи php в определенном порядке?

Мне необходимо вывести данные из БД в следующем виде (для визуализации могу привести пример: вид как у многоуровненного меню) при помощи php:

Сотрудники подразделения №1

1. ФИО Номер телефона ВТС номер комнаты
....
2. ФИО Номер телефона ВТС номер комнаты

Сотрудники подразделения №2

ФИО Номер телефона ВТС номер комнаты
....
ФИО Номер телефона ВТС номер комнаты


Дошел до данного этапа:
$db = new db();
    //Select the contacts SM (СУЭ) you want to show in your PDF file
    $query = 'SELECT 
                                        a1.LOCATION_NAME, 
                                        a1.LOCATION_CODE, 
                                        a1.CITY, 
                                        a1.EMAIL, 
                                        c1.DEPT_NAME,
                                        c1.LOCATION,
                                        c1.EMAIL AS C_MAIL,
                                        c1.ACTIVE,
                                        c1.FULL_NAME,
                                        c1.TITLE,
                                        c1.CONTACT_PHONE,
                                        c1.EXTENSION,
                                        c1.ROOM
                                FROM
                                        CONTCTSM1 c1
                                INNER JOIN
                                        DEPTM1 b1 ON b1.DEPT_NAME=c1.DEPT_NAME
                                INNER JOIN
                                        LOCM1 a1 ON a1.LOCATION_CODE=c1.LOCATION';


    $row = $db->select_list($query);

        if(count($row)) {
            $lorem = '';

                foreach($row as $r => $items) {
                                $loremed         .= '<h4>'
                                            . "".iconv("windows-1251", "utf-8",$items['DEPT_NAME']).""
                                            . '</h4><table class="bpmTopicC">
        <thead>
            <tr class="headerrow">
                <th>Должность</th>
                <td>
                <p>ФИО</p>
                </td>
                <td>
                Номер ВТС
                </td>
                <td>
                Городской номер
                </td>
                <td>
                Номер кабинета
                </td>
            </tr>
        </thead>
        <tfoot>
            <tr class="footerrow">
                <th>Должность</th>
                <td>
                <p>ФИО</p>
                </td>
                <td>
                Номер ВТС
                </td>
                <td>
                Городской номер
                </td>
                <td>
                Номер кабинета
                </td>
            </tr>
        </tfoot>
        <tbody>
            <tr><th>';
foreach($items as $r2 => $value) {
    $loremed .= iconv("windows-1251", "utf-8",$value['TITLE'])
        . '</th><td>'
        . iconv("windows-1251", "utf-8",$value['FULL_NAME'])
        . '</td><td>'
        . iconv("windows-1251", "utf-8",$value['EXTENSION'])
        . '</td><td>'
        . iconv("windows-1251", "utf-8",$value['CONTACT_PHONE'])
        .'</td><td>'
        . iconv("windows-1251", "utf-8",$value['ROOM'])
        . '</td>';
}
$loremed .= '</tr>
        </tbody>
    </table>';

    $lorem = $loremed;
                                            }

                                            } else {}

Как результат - белый экран, ошибок в логе нет.

Результат print_r($row); :
Array ( [0] => Array ( [DEPT_NAME] => Отдел 1 [LOCATION_NAME] => Красноярск [LOCATION_CODE] => 2300 [LOCATION] => 2300 [C_MAIL] => test@mail.local [ACTIVE] => f [FULL_NAME] => ФИО [TITLE] => инженер [CONTACT_PHONE] => (391)2-22-22-22 [EXTENSION] =>  2419 [ROOM] => 0123 ) [1] => Array ( [DEPT_NAME] => Отдел 1 [LOCATION_NAME] => Красноярск [LOCATION_CODE] => 2300 [LOCATION] => 2300 [C_MAIL] => test@mail.local [ACTIVE] => t [FULL_NAME] => ФИО2 [TITLE] => главный инженер [CONTACT_PHONE] => (391)2-22-22-22 [EXTENSION] => 2407 [ROOM] => 3025 ) [2] => Array ( [DEPT_NAME] => Отдел 2 [LOCATION_NAME] => Красноярск [LOCATION_CODE] => 2300 [LOCATION] => 2300 [C_MAIL] => test@mail.local [ACTIVE] => t [FULL_NAME] => ФИО3 [TITLE] => главный специалист [CONTACT_PHONE] => (391) 2-22-22-22 [EXTENSION] => 3210 [ROOM] => 405 ) [3] => Array ( [DEPT_NAME] => Отдел 8 [LOCATION_NAME] => Заозерный [LOCATION_CODE] => 2308 [LOCATION] => 2308 [C_MAIL] => mail@test.local [ACTIVE] => t [FULL_NAME] => ФИО4 [TITLE] => начальник отдела [CONTACT_PHONE] => (39165) 2-22-22 [EXTENSION] => 2010 [ROOM] => 102 ) ....
  • Вопрос задан
  • 224 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Quieteroks
php программист
1 вариант:
PHP тут не при чем. Просто добавьте в запрос ORDER BY `field`

Если динамически выбирать поле из запроса, то брать поле, а лучше код из "справочника".
А после добавляешь в запрос.

2 вариант:
Нужно собрать корректный массив, в вашем случае с вложениями по департаментам:
$departments = [];
foreach($row as $items) {
    if (!isset($departments[$item['DEPT_NAME']])) {
        $departments[$item['DEPT_NAME']] = [];
    }
    $departments[$item['DEPT_NAME']][] = $items;
}

А после вы можете их сортировать как вам удобно. Благо для этого полно функций в php. Сами департаменты отсортировать нужно по ключам (krsort, ksort). А если еще и внутри, то тут уже через посложнее, но тоже возможно, посмотрите примеры использования (usort - пример с многомерными массивами).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы