Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用rowspan PHP创建动态表_Php_Html_Mysql - Fatal编程技术网

使用rowspan PHP创建动态表

使用rowspan PHP创建动态表,php,html,mysql,Php,Html,Mysql,如何使用PHP从MySQL检索的数据创建表 ------------------------- | albumID | trackID | ------------------------- | | 1990 | - 1 ------------- | | 1991 | ------------------------- | | 1992 | - --------

如何使用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";

非常感谢您给予的任何帮助

您可以使用一个变量来跟踪当前相册,只输出一次相册,如下所示

$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查询以返回该行,或者您可以将结果处理为多维数组,然后通过该数组循环生成输出。

可能不是最优雅的解决方案,但我们应该做到这一点

$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";

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

$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";

如果你想连接电池,你可以看看td的ROWSPAN问题是我不能自动连接,先生,我不知道该怎么办