使用rowspan PHP创建动态表
如何使用PHP从MySQL检索的数据创建表使用rowspan PHP创建动态表,php,html,mysql,Php,Html,Mysql,如何使用PHP从MySQL检索的数据创建表 ------------------------- | albumID | trackID | ------------------------- | | 1990 | - 1 ------------- | | 1991 | ------------------------- | | 1992 | - --------
-------------------------
| 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> </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问题是我不能自动连接,先生,我不知道该怎么办