使用rowspan PHP创建动态表

时间:2015-04-12 18:14:35

标签: php html mysql

如何使用PHP

创建一个包含从MySQL检索到的数据的表
-------------------------
| albumID   |  trackID  |
-------------------------
|           |  1990     |
-    1      -------------
|           |  1991     |
-------------------------
|           |  1992     |
-           -------------
|    2      |  1993     |
-           -------------
|           |  1994     |
-------------------------

我可以从数据库生成一个表,但结果将只是像一行中的每个结果一样

$query = "SELECT albumID, trackID
          FROM songs";

$result = mysqli_query($db, $query);

echo "<table>";
echo "<tr>\n";
echo "<th>albumID</th>\n";
echo "<th>trackID</th>\n";
echo "</tr>\n";

while ($data = mysqli_fetch_array($result)) {
    echo "<tr>\n";
    echo "<td>$data[0]</td>\n";
    echo "<td>$data[1]</td>\n";
    echo "</tr>\n";
}

echo "</table>\n";

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

您可以使用变量跟踪当前相册并仅输出相册一次,如下所示。

$current_album = ''; # initialize tracking var 
while ($data = mysqli_fetch_array($result)) {
    echo "<tr>\n";
    if ($current_album != $data[0]) {
        echo "<td>$data[0]</td>\n";
        $current_album = $data[0];
    } else {
        echo "<td>&nbsp;</td>\n"; # insert empty cell
    }
    echo "<td>$data[1]</td>\n";
    echo "</tr>\n";
}

这将使相册ID出现在相册的第一行。如果你想让它垂直居中,你可以在td元素上使用rowspan,但是为了知道每个专辑有多少行,你需要更新你的sql查询以返回它,或者你可以将结果处理成一个多维数组然后遍历它以生成输出。

答案 1 :(得分:0)

也许不是最优雅的解决方案,但应该做到这一点。

$query = "select albumID as album, group_concat(trackID) as tracks from songs group by albumID";

$result = mysqli_query($db, $query);

echo "<table>";
echo "<tr>\n";
echo "<th>albumID</th>\n";
echo "<th>trackID</th>\n";
echo "</tr>\n";

while ($data = mysqli_fetch_array($result)) {
    $tracks = explode(",", $data[1]);

    echo "<tr>\n";
    echo "<td rowspan=\"".count($tracks)."\">$data[0]</td>\n";

    foreach ($tracks as $key => $value) {
        echo "<td>$value</td>\n"
    }

    echo "</tr>\n";
}

echo "</table>\n";

答案 2 :(得分:0)

编辑查询以返回相册的曲目数,并使用该数字仅在第一个曲目行创建行数。我写了一个小例子,但是如果它有效的话,我还没试过。

$query = "SELECT s.albumID, s.trackID, 
          ( SELECT COUNT(*) 
            FROM songs s2 
            WHERE s2.albumID = s.albumID )
          FROM songs s";

$result = mysqli_query($db, $query);

echo "<table>";
echo "<tr>\n";
echo "<th>albumID</th>\n";
echo "<th>trackID</th>\n";
echo "</tr>\n";

$tmpAlbum = '';

    while ($data = mysqli_fetch_array($result)) {
          echo "<tr>\n";
          echo "<td";

          if($data[2] == 1){
              echo "<td>$data[0]</td>\n";
          }else{
               if($data[0] != $tmpAlbum){
                    echo "<td rowspan=\"".$data[2]."\">$data[0]</td>\n";
                }
          }

          $tmpAlbum = $data[0];


          echo "<td>$data[1]</td>\n";
          echo "</tr>\n";
    }

echo "</table>\n";
相关问题