Adam Anderson
Adam Anderson

Reputation: 123

How to transpose column into row?

I have the following code that pulls a table from a mysql databse and turns it into a table in html.

$query = mysqli_query($link, "select * from timetable Where id = $id and subject != '' order by Day asc, Hour asc "  );
?>
<tr>
    <th>day</th>
    <th>hour</th>
    <th>subject</th>
</tr>
<?php
while ($row = mysqli_fetch_array($query)) {
    echo "<tr>";
    echo "<td>".$row['Day']."</td>";
    echo "<td>".$row['Hour']."</td>";
    echo "<td>".$row['Subject']."</td>";
    echo "</tr>";
}

?>

Im trying to make it so the day column is transposed to be along the top of the table as the first row.

Here is an example of a table

day hour subject
0   5   Maths
0   7   Maths
1   0   Maths
1   11  Physics
2   0   Physics
2   9   Maths
3   0   Physics
3   4   Maths
3   6   Physics
3   10  Maths
4   3   Maths
4   8   Physics
5   0   Maths
5   9   Physics
6   1   Maths
6   6   Physics

(note that I removed null values to make the table smaller for this question)

here is what I would like the table to look like

       Day  0     1     2      3     4     5     6 
  hour
     1   physics
     2
     3
     4                      maths
     5          ect 
     6
     7
     8
     9 
     10
     11
     12

Upvotes: 0

Views: 1143

Answers (1)

vangoo
vangoo

Reputation: 91

you can create this template firsly

<tr>
<td>Hours\Days</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>

after that

<?php 
for($hour = 1;$hour < 13; $hour++){
    echo "<tr>";
    echo "<td>".$hour."</td>";  
    for($day = 0; $day < 7; $day++){
        while ($row = mysqli_fetch_array($query)) { 
            if($row['Day'] == $day && $row['Hour'] == hour)
                echo "<td>".$row['Subject']."</td>";
            else
                echo "<td></td>";
        }
    }   
    echo "</tr>"
}
?>

maybe u can write shorter code than me but its simple way.

Upvotes: 2

Related Questions