1)你合计的时候为何要插入那条记录,我们SHOW是有办法这样SHOW,但实际上,即便你INSERT,记录还是在表的尾部的。
2)分页的时候不截断同一类别不大明白。假设你一页允许40笔,但1类的资料就有50笔,你能不分页吗?那如果要分页,不就要截断了?
如果你不分页,那打印肯定有问题。
但是可在你的分页判断那边加个and 条件,就是当前的类是不是等于前面定义的类变量。我不知道你是怎么分类的。我习惯
select .... where 1<2 order by id;(假设要以ID进行分类)
$quy = mysql_query($sql);
$i = 0;
while( $value = mysql_fetch_array($quy) ){
$id = $value[id];
@mysql_data_seek($quy,$i);
while( $value1 = mysql_fetch_array($quy) and $value1[id] == $id ){
//过程语句
$i++;
}
@mysql_data_seek($quy,$i);
//显示类别合计
}
2)分页的时候不截断同一类别不大明白。假设你一页允许40笔,但1类的资料就有50笔,你能不分页吗?那如果要分页,不就要截断了?
如果你不分页,那打印肯定有问题。
但是可在你的分页判断那边加个and 条件,就是当前的类是不是等于前面定义的类变量。我不知道你是怎么分类的。我习惯
select .... where 1<2 order by id;(假设要以ID进行分类)
$quy = mysql_query($sql);
$i = 0;
while( $value = mysql_fetch_array($quy) ){
$id = $value[id];
@mysql_data_seek($quy,$i);
while( $value1 = mysql_fetch_array($quy) and $value1[id] == $id ){
//过程语句
$i++;
}
@mysql_data_seek($quy,$i);
//显示类别合计
}
$quy = mysql_query($sql);
$i = 0;
while( $value = mysql_fetch_array($quy) ){
$id = $value[id];
unset($string);
$j = 0;
$count = 0;
@mysql_data_seek($quy,$i);
while( $value1 = mysql_fetch_array($quy) and $value1[id] == $id ){
//过程语句
$count += $value1[合计];
$string[$j] = "<tr><td>值1</td><td>值2</td><td>值3</td><td></td></tr>";
$i++;
$j++;
}
@mysql_data_seek($quy,$i);
$last_line = $string[$j-1];
$last_line = substr($last_line,0,(strlen($last_line)-11));
$last_line.= $count."</td></tr>";
$string[$j-1] = $last_line;
for( $k = 0;$k < $j;$k ++){
echo $string[$k];
}
//显示类别合计
}
处理最后一行写的比较笨,看其他学者有没有更好一点的。
除非有特殊需求或者性能要求
sql串写做
select 类别, 产品, 数量, 单价, 价格 from tbl_name
union
select 类别, '合计' as 产品, sum(数量) as 数量, 0 as 单价, sum(价格) as 价格
from tbl_name
group by 类别
order by 类别对于楼主的第二次的要求格式,不能简单的用sql实现
考虑到可能对所用数据库的不了解或某些需要的功能数据库不提供。个人倾向于只做简单的数据库查询,而用php完成统计工作sql串写做
select 类别, 产品, 数量, 单价, 价格
from tbl_name
order by 类别$rs为查询结果资源
数据库假定为mysql
则
$类别 = -1;
$数量 = 0;
$合计 = 0;
while($row = mysql_fetch_array($rs)) {
if($类别 != $row['类别']) {
if($合计) {
输出合计行
}
$数量 = 0;
$合计 = 0;
$类别 = $row['类别'];
}
$数量 += $row['数量'];
$合计 = $row['合计'];
输出数据行;
}
输出合计行对于第二种格式
$类别 = -1;
$数量 = 0;
$合计 = 0;
while($row = mysql_fetch_array($rs)) {
if($类别 != $row['类别']) {
if($合计) {
输出数据行;
输出合计列
}
$数量 = 0;
$合计 = 0;
$类别 = $row['类别'];
}else {
输出数据行;
输出空合计列
}
$数量 += $row['数量'];
$合计 = $row['合计'];
}
输出合计列
现在不用再考虑第一种格式了,我看过了你的代码,总觉得合计列会显示在下一类别的第一行7楼水米应该就可以实现,不过正如他自己说的,最后处理是笨了一点,而且用截取字符串的方法可能会很容易出错,导致页面乱78糟。再看看有没有高手指点
不然你也可以这么处理
select .... where 1<2 order by id;(假设要以ID进行分类)
$quy = mysql_query($sql);
$i = 0;
while( $value = mysql_fetch_array($quy) ){
$id = $value[id];
unset($string);
$j = 0;
$count = 0;
@mysql_data_seek($quy,$i);
while( $value1 = mysql_fetch_array($quy) and $value1[id] == $id ){
//过程语句
$count += $value1[合计];
$string[$j] = "<tr><td>值1</td><td>值2</td><td>值3</td><td>zalvsa</td></tr>";
$i++;
$j++;
}
@mysql_data_seek($quy,$i);
$last_line = str_replace("zalvsa",$count,$string[$j-1]);
for( $k = 0;$k < $j;$k ++){
echo str_replace("zalvsa","",$string[$k]);
}
//显示类别合计
}
我先前不采用str_replace是觉得这样的话变成要再重新对数组的每项进行赋值,是否会影响了速度。