Я хочу создать таблицу HTML и отображать записи из таблиц MySQL в виде столбцов, а не строк, например:
Имена недель указаны в таблице «неделя», и каждая неделя записи также содержит количество сеансов на этой неделе:
+---------+-----------+----------+-----------+ | week_pk | week_name | sessions | cohort_fk | +---------+-----------+----------+-----------+ | 1 | Week 1 | 3 | 1 | | 2 | Week 2 | 2 | 1 | | 3 | Week 3 | 1 | 1 | +---------+-----------+----------+-----------+
Когортная таблица:
+-----------+-------------+-------------+-------------+ | cohort_pk | cohort_name | cohort_code | cohort_year | +-----------+-------------+-------------+-------------+ | 1 | Some name | MICR8976 | 2014 | +-----------+-------------+-------------+-------------+
Я нашел код, который генерирует записи в таблице в виде столбцов таблицы HTML, ОК (я уверен, что этот код может быть улучшен …).
Итак, вопрос в том, как изменить этот код для генерации столбцов сеанса в таблице HTML за каждую неделю coloumn? Например, для столбца Неделя 1 в таблице HTML, трех столбцов сеанса и т. Д. Для столбцов другой недели?
Любая помощь в решении оценивается.
$query = "SELECT * FROM cohort, week WHERE week.cohort_fk = cohort.cohort_pk AND cohort.cohort_year = '$year' AND cohort.cohort_pk = '$cohort'"; $result = mysql_query($query, $connection) or die(mysql_error()); echo "<table width = 50% border = '1' cellspacing = '2' cellpadding = '0'>"; $position = 1; while ($row = mysql_fetch_array($result)){ if($position == 1){ echo "<tr>"; } echo " <td width='50px'>" . $row['week_name'] . "</td> "; if($position == 3){ echo "</tr> "; $position = 1; }else{ $position++; } } $end = ""; if($position != 1){ for($z=(3-$position); $z>0; $z--){ $end .= "<td></td>"; } $end .= "</tr>"; } echo $end."</table> ";
Функции mysqli_ * используются в следующем примере.
$year = 2014; //for the testing purpose $cohort = 1; //for the testing purpose $query = "SELECT * FROM cohort, week WHERE week.cohort_fk = cohort.cohort_pk AND cohort.cohort_year = '$year' AND cohort.cohort_pk = '$cohort'"; $dblink = mysqli_connect("localhost", "root", "", "test"); $result = mysqli_query($dblink, $query); echo "<table border='1'>"; echo "<tr><td>Name</td>"; $second_row = "<tr><td>Session</td>"; while( $row = mysqli_fetch_assoc($result) ){ $weekname = $row["week_name"]; $n_session = $row["sessions"]; echo "<td colspan='$n_session'>$weekname</td>"; for($i=1; $i<=$n_session; $i++){ $second_row .= "<td>S$i</td>"; } }//end while echo "</tr>"; echo "$second_row</tr>"; echo "</table>";
ADDED: создать третий ряд –
$year = 2014; $cohort = 1; $query = "SELECT * FROM cohort, week WHERE week.cohort_fk = cohort.cohort_pk AND cohort.cohort_year = '$year' AND cohort.cohort_pk = '$cohort'"; $dblink = mysqli_connect("localhost", "root", "", "test"); $result = mysqli_query($dblink, $query); echo "<table border='1'>"; echo "<tr><td>Name</td>"; $second_row = "<tr><td>Session</td>"; $totalcolumn = 1; //for the third row while( $row = mysqli_fetch_assoc($result) ){ $weekname = $row["week_name"]; $n_session = $row["sessions"]; $totalcolumn += $n_session; //for the third row echo "<td colspan='$n_session'>$weekname</td>"; for($i=1; $i<=$n_session; $i++){ $second_row .= "<td>S$i</td>"; } }//end while echo "</tr>"; echo $second_row . "</tr>"; echo "<tr>"; //for the third row for($i=1; $i<=$totalcolumn; $i++){ //for the third row echo "<td>data-set</td>"; //for the third row } //for the third row echo "</tr>"; //for the third row echo "</table>";
вы можете добавить еще один HTML <table>
вместо data-set
$query = "SELECT * FROM cohort, week WHERE week.cohort_fk = cohort.cohort_pk AND cohort.cohort_year = '$year' AND cohort.cohort_pk = '$cohort'"; $result = mysql_query($query, $connection) or die(mysql_error()); $table = array("<table width = 50% border = '1' cellspacing = '2' cellpadding = '0'>"); $table[] = "</tr>"; $table[] = "<th>Name</th>"; $rows = array(); while ($rows[] = $row = mysql_fetch_array($result, MYSQL_ASSOC)) $table[] = "<td colspan='" . (int) $row['sessions'] . "'>" . $row['week_name'] . "</td>"; $table[] = "</tr>"; $table[] = "<tr>"; $table[] = "<th>Sessions</th>"; foreach ($rows as $row) { for ($i = 1; $i <= (int) $row['sessions']; $i++) $table[] = "<td>S" . $i . "</td>"; } $table[] = "</tr>"; $table[] = "</table>"; echo join("", $table);