Добавить больше данных в html таблицу

247
21 декабря 2016, 01:53

Имеется html таблица которая отоброжает ланные с базы данных вертикально и горизонтально. Отоброжается только никнейм, нужно добавить полное имя а также айди. Что имеется на данный момент: Query:

$conn = mysqli_connect(DATABASE_HOST, DATABASE_USER, DATABASE_PASSWORD, DATABASE_NAME); 
// 1.Get data
// data for final table
// format is [username][projectNo] => [process1, process2, ..., processN]
$result = [];
// map project no to its title
$projectNoToTitle = [];
$sql = '
    SELECT uid, username, staff_id, longname
    FROM `user`
    ORDER BY username
';
$query = mysqli_query($conn, $sql);
// for each user
while ($data = mysqli_fetch_assoc($query)) {
    $sql2 = '
        SELECT a.* FROM
        (
            (
              -- select pairs project - leader
              SELECT p.projectNo, p.title, CONCAT(pr.process, "(ld)") AS process
              FROM project p
                LEFT JOIN proc_leader pr ON p.projectNo = pr.projectNo
                  AND pr.proc_leader = "' . mysqli_real_escape_string($conn, $data['username']) . '"
            )
            -- union all means we union result of queries, which have structure
            -- and don\'t remove duplicates (it\'s faster than UNION and 
            -- more logical because in our sittuation it won\'t be any duplicates) 
            UNION ALL 
            (
              -- select pairs project - checker
              SELECT p.projectNo, p.title, CONCAT(pch.process, "(chk)") AS process
              FROM project p
                LEFT JOIN proc_checker pch ON p.projectNo = pch.projectNo
                  AND pch.proc_checker = "' . mysqli_real_escape_string($conn, $data['username']) . '"  
            )
            UNION ALL 
            (
              -- select pairs project - checker
              SELECT p.projectNo, p.title, CONCAT(pch.process, "(staff)") AS process
              FROM project p
                LEFT JOIN proc_staff pch ON p.projectNo = pch.projectNo
                  AND pch.proc_staff = "' . mysqli_real_escape_string($conn, $data['username']) . '"  
            )
        ) AS a
        ORDER BY a.projectNo';
    $query2 = mysqli_query($conn, $sql2);
    // for each project => process pair of user
    while ($data2 = mysqli_fetch_assoc($query2)) {
        $staff_id = $data['staff_id'];
        $longname = $data['longname'];
        $username = $data['username'];
        $projectNo = $data2['projectNo'];
        $projectTitle = $data2['title'];
        $process = $data2['process'];
        $projectNoToTitle[$projectNo] = $projectTitle;
        if (!isset($result[$username])) {
            $result[$username] = [];
        }
        if (!isset($result[$username][$projectNo])) {
            $result[$username][$projectNo] = [];
        }
        if ($process) {
            $result[$username][$projectNo][] = $process;
        }
    }
}

И сама таблица:

            <table style="background-color:rgb(238, 238, 238)" id="dataTable4" class="tablesorter" class="tblD" border="0" cellpadding="0" cellspacing="1">
            <?php
            // 2. Output table
            // create table header
            // it's columns should contain all projects
            if ($result) {
                $header =
                    '<th>Staff ID</th>
                    <th>Full Name</th>
                    <th>Username</th>' .
                    array_reduce(array_values($projectNoToTitle), function ($p, $n) {
                        return $p . '<th>Project ' . htmlspecialchars($n) . '</th>';
                    });
                // output body
                $body = '';
                foreach ($result as $username => $usernameData) {
                    $row = '<td>' . htmlspecialchars($username) . '</td>';
                    foreach ($projectNoToTitle as $projectNo => $projectTitle) {
                        $r = isset($usernameData[$projectNo])
                            ? implode(', ', $usernameData[$projectNo])
                            : 'N/A';
                        $row .= '<td>' . htmlspecialchars($r) . '</td>';
                    }
                    $body .= "<tr>$row</tr>";
                }
                echo "<thead>$header</thead><tbody>$body</tbody>";
            }// \2. Output table
            ?>
            </table>

Как я могу добавить $staff_id = $data['staff_id']; $longname = $data['longname']; в таблицу?

Answer 1

Вот как-то так:

           <table style="background-color:rgb(238, 238, 238)" id="dataTable4" class="tablesorter" class="tblD" border="0" cellpadding="0" cellspacing="1"> 
            <?php 
 
            // 2. Output table 
            // create table header 
            // it's columns should contain all projects 
            if ($result) { 
                $header = 
                    '<th>Staff ID</th> 
                    <th>Full Name</th> 
                    <th>Username</th>' . 
                    array_reduce(array_values($projectNoToTitle), function ($p, $n) { 
                        return $p . '<th>Project ' . htmlspecialchars($n) . '</th>'; 
                    }); 
 
                // output body 
                $body = ''; 
                foreach ($result as $username => $usernameData) { 
                    $row = '<td>' . htmlspecialchars($longname) . '</td>' . '<td>' . htmlspecialchars($staff_id) . '</td>' . '<td>' . htmlspecialchars($username) . '</td>'; 
                    foreach ($projectNoToTitle as $projectNo => $projectTitle) { 
                        $r = isset($usernameData[$projectNo]) 
                            ? implode(', ', $usernameData[$projectNo]) 
                            : 'N/A'; 
                        $row .= '<td>' . htmlspecialchars($r) . '</td>'; 
                    } 
                    $body .= "<tr>$row</tr>"; 
                } 
 
                echo "<thead>$header</thead><tbody>$body</tbody>"; 
            }// \2. Output table 
            ?> 
            </table>

READ ALSO
SQL сложный запрос &ldquo;один ко многим&rdquo;

SQL сложный запрос “один ко многим”

СитуацияИмеем 3 таблицы

287
Запрос в MySQL и выбор из нескольких таблиц

Запрос в MySQL и выбор из нескольких таблиц

Есть несколько одинаковых таблиц в базеКак сделать запрос из всех? Вот запрос на выбор из одной:

303
Обработка ошибок MySQL в PHP

Обработка ошибок MySQL в PHP

ЗдравствуйтеВ разных частях моего php-скрипта я выполняю запросы к БД MySQL

264
Подсчитать кол-во записей в каждой категории

Подсчитать кол-во записей в каждой категории

ЗдравствуйтеТребуется на сайте произвести подсчет, сколько записей находится в каждой категории, а так же подсчитать общее кол-во всех записей

251