如何解决从数据库中获取记录时的动态行跨度
|Ename Sal
tom 100
tom 200
bill 100
bill 250
bill 450
bill 400
这是给出上述输出的查询和html结构。
<?php
$sql = \"select * from emp \";
$result= mysql_query($sql);
while($row=mysql_fetch_array($result))
{
<tr >
<td rowspan=\"\" ><?php echo $row[\'ename\']; ?></td>
<td><?php echo $row[\'esal\']?></td>
</tr>
<? }?>
我如何获得以下输出:
Ename Sal
tom 100
200
bill 100
250
450
400
解决方法
对不起,我的英语不好:
在这里,我回答了这个问题,如何显示具有动态行跨度的数据库中的数据。再次让我尝试回答这个问题。首先,以免我们进行mysql查询。
MySql的工作:
在mysql查询中,您尚未查询排序依据。因为在现实生活中,您不能期望汤姆的所有记录都在账单记录中。例如,进行以下插入。
INSERT INTO test_work(ename,sal)
VALUES(\"tom\",100),(\"bill\",450),(\"tom\",200),250),400),(\"James\",50);
SELECT * FROM test_work;
结果:
+-------+------+
| ename | sal |
+-------+------+
| tom | 100 |
| bill | 450 |
| bill | 100 |
| tom | 200 |
| bill | 250 |
| bill | 400 |
| James | 50 |
+-------+------+
因此,您的mysql查询应按ename排序。这里每个人的工资也应该是标准的。所以我们的查询:
SELECT * FROM emp ORDER BY ename,sal;
编码:
整个任务我们可以分为3部分。
Mysql数据获取并存储在数组中。
计算行跨度
列印
MySql的数据获取:
在从mysql服务器获取数据的过程中,始终应尝试使用mysql_fetch_assoc函数而不是mysql_fetch_array。因为mysql_fetch_assoc将仅返回ename和sal。但是mysql_fetch_array将返回索引为ename,sal,0、1的数组。
# connect to mysql server
# and select the database,on which
# we will work.
$conn = mysql_connect(\'\',\'root\',\'\');
$db = mysql_select_db(\'test\');
# Query the data from database.
$query = \'SELECT * FROM test_work ORDER BY ename,sal\';
$result = mysql_query($query);
# Intialize the array,which will
# store the fetched data.
$sal = array();
$emp = array();
# Loop over all the fetched data,and save the
# data in array.
while($row = mysql_fetch_assoc($result)) {
array_push($emp,$row[\'ename\']);
array_push($sal,$row[\'sal\']);
}
计算行跨度:
# Intialize the array,which will store the
# rowspan for the user.
$arr = array();
# loop over all the sal array
for ($i = 0; $i < sizeof($sal); $i++) {
$empName = $emp[$i];
# If there is no array for the employee
# then create a elemnt.
if (!isset($arr[$empName])) {
$arr[$empName] = array();
$arr[$empName][\'rowspan\'] = 0;
}
$arr[$empName][\'printed\'] = \"no\";
# Increment the row span value.
$arr[$empName][\'rowspan\'] += 1;
}
当您将print_r arr数组时,输出将是:
Array
(
[bill] => Array
(
[rowspan] => 4
[printed] => no
)
[James] => Array
(
[rowspan] => 1
[printed] => no
)
[tom] => Array
(
[rowspan] => 2
[printed] => no
)
)
按行打印:
echo \"<table cellspacing=\'0\' cellpadding=\'0\'>
<tr>
<th>Ename</th>
<th>Sal</th>
</tr>\";
for($i=0; $i < sizeof($sal); $i++) {
$empName = $emp[$i];
echo \"<tr>\";
# If this row is not printed then print.
# and make the printed value to \"yes\",so that
# next time it will not printed.
if ($arr[$empName][\'printed\'] == \'no\') {
echo \"<td rowspan=\'\".$arr[$empName][\'rowspan\'].\"\'>\".$empName.\"</td>\";
$arr[$empName][\'printed\'] = \'yes\';
}
echo \"<td>\".$sal[$i].\"</td>\";
echo \"</tr>\";
}
echo \"</table>\";
代码优化:
现在,我们可以结合使用rowspan计算和mysql数据获取。因为在将获取的数据保存到数组期间,我们可以计算行跨度。所以我们的最终代码:
<!DOCTYPE html>
<html>
<head>
<style>
table tr td,table tr th{
border: black 1px solid;
padding: 5px;
}
</style>
</head>
<body>
<?php
# connect to mysql server
# and select the database,on which
# we will work.
$conn = mysql_connect(\'\',\'\');
$db = mysql_select_db(\'test\');
# Query the data from database.
$query = \'SELECT * FROM test_work ORDER BY ename,sal\';
$result = mysql_query($query);
# $arr is array which will be help ful during
# printing
$arr = array();
# Intialize the array,which will
# store the fetched data.
$sal = array();
$emp = array();
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
# data saving and rowspan calculation #
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
# Loop over all the fetched data,and save the
# data.
while($row = mysql_fetch_assoc($result)) {
array_push($emp,$row[\'ename\']);
array_push($sal,$row[\'sal\']);
if (!isset($arr[$row[\'ename\']])) {
$arr[$row[\'ename\']][\'rowspan\'] = 0;
}
$arr[$row[\'ename\']][\'printed\'] = \'no\';
$arr[$row[\'ename\']][\'rowspan\'] += 1;
}
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# DATA PRINTING #
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
echo \"<table cellspacing=\'0\' cellpadding=\'0\'>
<tr>
<th>Ename</th>
<th>Sal</th>
</tr>\";
for($i=0; $i < sizeof($sal); $i++) {
$empName = $emp[$i];
echo \"<tr>\";
# If this row is not printed then print.
# and make the printed value to \"yes\",so that
# next time it will not printed.
if ($arr[$empName][\'printed\'] == \'no\') {
echo \"<td rowspan=\'\".$arr[$empName][\'rowspan\'].\"\'>\".$empName.\"</td>\";
$arr[$empName][\'printed\'] = \'yes\';
}
echo \"<td>\".$sal[$i].\"</td>\";
echo \"</tr>\";
}
echo \"</table>\";
?>
</body>
</html>
结果:
, 像这样吗
While data
echo
<tr>
<td rowspan=\"3\"><p>numbers</p></td>
<td><p>1</p></td>
<td><p>2</p></td>
</tr>
请发布您的代码
, 您可以在最后一行和当前行中检查类似的条件。
$sql = \"select * from emp\";
$result= mysql_query($sql);
echo \"<table>\";
while($row=mysql_fetch_array($result))
{
$now=$row[0];
if($last!=$now) {
echo \"<tr><td>$row[\'ename\']</td><td>$row[\'esal\']</td></tr>\";
}else{
echo \"<tr><td> </td><td>$row[\'esal\']</td></tr>\";
}
$last = $row[0];
}
echo \"</table>\";
我希望这能帮到您。
, 应该是这样
<?php
$sql = \"SELECT * FROM emp \";
$result= mysql_query($sql);
while($row=mysql_fetch_array($result)):
$ename = $row[\'ename\'];
// count the esal in each ename
$sql2 = \"SELECT * FROM emp WHERE ename=$ename\";
$result2 = mysql_query($sql2);
$count_result2 = mysql_num_rows($result2);
?>
<tr >
<td rowspan=\"<?php echo $count_result2; ?>\"><?php echo $row[\'ename\']; ?></td>
<?php
// loop each esal
while($row2 = mysql_fetch_array($result2)):
?>
<td><?php echo $row[\'esal\']; ?></td>
</tr>
<?php
endwhile; // endwhile for each esal looping
endwhile; // endwhile for the main looping
?>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。