2014-02-19 4 views
0

Я хочу, чтобы генерировать HTML-таблицы и отображения записей из таблиц MySQL в качестве столбцов, а не строк, как:Показать MYSQL записи как столбцы таблицы HTML

enter image description here

The недельных имен в таблице «недели» и каждую неделю запись также содержит количество сессий на этой неделе:

+---------+-----------+----------+-----------+ 
| 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> "; 
+2

Пожалуйста [не используйте 'mysql_ * '] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php?rq=1); функции 'mysql_ * 'устарели, [устарели] (http://us3.php.net/manual/en/intro.mysql.php) и небезопасны. Используйте ['MySQLi'] (http://us3.php.net/manual/en/book.mysqli.php) или [' PDO'] (http://us3.php.net/manual/en/intro. pdo.php). Кроме того, вы широко открыты для [** SQL injection **] (https://www.owasp.org/index.php/SQL_Injection). Что касается того, как решить вашу проблему, это действительно просто: просто используйте '$ row ['whatever_column_name']' где вы хотите эти данные. –

ответ

1

функции 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>"; 

ДОБАВЛЕНО: генерировать третий ряд -

$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

+0

Ваш чемпион !! Браво! – IlludiumPu36

+0

Я задам еще один вопрос, когда я расширяю этот вопрос, чтобы показать имена участников как дополнительные строки. – IlludiumPu36

+0

См. Http://stackoverflow.com/questions/21871614/adding-rows-to-a-html-table-with-dynamic-columns для расширения по этому вопросу – IlludiumPu36

0
$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); 
Смежные вопросы