2016-12-22 20 views
0

私はデータベースからデータを取るhtmlテーブルを持っています。ここでhtmlテーブルにデータを追加

は私のSQLクエリです:

// 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(upr.process, (upr.role)) AS process 
       FROM project p 
       LEFT JOIN user_project upr ON p.projectNo = upr.projectNo 
        AND upr.username = "' . 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($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 
?> 

私はユーザー名を印刷することができていますが、staff_idlongnameで問題を抱えて。ここに私の出力があります。

output

システムは、問題は、あなたが$results配列に$longname$staff_idを入れていないということであるテーブル名から姓をとり、リスト

+0

だけ内側 '一方を介してユーザ情報を初めて印刷'ループ。これらの列は他の行では空白のままにします。 – Barmar

+0

あなたの質問は何ですか? – PavKR

+0

@ PavKR staff_idとlongnameを正しく印刷するには –

答えて

1

内のすべてのユーザ名のためにそれを印刷します。テーブルを印刷するときは、データベース内の最後のユーザーの値を含む変数を使用します。

変更データベースの結果を処理ループへ:

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] = [ 'longname' => $longname, 'staff_id' => $staff_id, 'projects' => []]; 
    } 
    if (!isset($result[$username]['projects'][$projectNo])) { 
     $result[$username]['projects'][$projectNo] = []; 
    } 
    if ($process) { 
     $result[$username]['projects'][$projectNo][] = $process; 
    } 
} 

そしてテーブルを構築するコードがなければならない:

foreach ($result as $username => $usernameData) { 
    $row = '<td>' . htmlspecialchars($usernameData['longname']) . '</td>' . '<td>' . htmlspecialchars($usernameData['staff_id']) . '</td>' . '<td>' . htmlspecialchars($username) . '</td>'; 
    foreach ($projectNoToTitle as $projectNo => $projectTitle) { 
     $r = isset($usernameData['projects'][$projectNo]) 
      ? implode(', ', $usernameData['projects'][$projectNo]) 
      : 'N/A'; 
     $row .= '<td>' . htmlspecialchars($r) . '</td>'; 
    } 
    $body .= "<tr>$row</tr>"; 
} 
関連する問題