社区
基础编程
帖子详情
一个根据类别统计的列表,想了很久都没头绪!请高手指点!!!
pennyhe
2006-01-11 03:56:09
需要显示一个表格,结构是这样的:
类别 产品 数量 单价 价格
1 001 10 5 50
1 002 10 6 60
1 003 5 3 15
25 125
2 004 8 5 40
2 005 6 8 48
14 88
3 006 2 1 2
。。。
怎样可以把合计那行插进去,而且如果分页怎么能避免不截断同一个类别?
希望有一个完美解决方案!!
...全文
130
14
打赏
收藏
一个根据类别统计的列表,想了很久都没头绪!请高手指点!!!
需要显示一个表格,结构是这样的: 类别 产品 数量 单价 价格 1 001 10 5 50 1 002 10 6 60 1 003 5 3 15 25 125 2 004 8 5 40 2 005 6 8 48 14 88 3 006 2 1 2 。。。 怎样可以把合计那行插进去,而且如果分页怎么能避免不截断同一个类别? 希望有一个完美解决方案!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zalvsa
2006-01-12
打赏
举报
回复
你要这么说,我也真的没招了,能用来做标志的当然你要拿一个出现概率为0的,我也真的就不信,会出现zalvsa.其他奇怪的字符串还一大把。LZ你要砖牛角尖,我也没招。至少我想不出单SQL,遍历一次数据表的还能有比那个速度更快的了。
pennyhe
2006-01-12
打赏
举报
回复
那如果值1、值2、值3刚好是“zalvsa”,那不也一齐被replace了??
zalvsa
2006-01-12
打赏
举报
回复
呵呵,因为只想用一个SQL处理。
不然你也可以这么处理
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是觉得这样的话变成要再重新对数组的每项进行赋值,是否会影响了速度。
pennyhe
2006-01-12
打赏
举报
回复
to: xuzuning(唠叨)
现在不用再考虑第一种格式了,我看过了你的代码,总觉得合计列会显示在下一类别的第一行
7楼水米应该就可以实现,不过正如他自己说的,最后处理是笨了一点,而且用截取字符串的方法可能会很容易出错,导致页面乱78糟。
再看看有没有高手指点
xuzuning
2006-01-12
打赏
举报
回复
对于楼主的第一次的要求格式
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['合计'];
}
输出合计列
pennyhe
2006-01-12
打赏
举报
回复
我都说过我不是要把合计放进数据库里,只是显示出来而已。现在的问题是怎样在当前的循环里与下一条记录的数据做比较,这就是我的需求!!!
请Meteorlet看清再说,难道我连“SELECT SUM(数量), SUM(单价) FROM 表格 GROUP BY 种类 ORDER BY 种类”这语句都不懂吗?
Meteorlet
2006-01-12
打赏
举报
回复
SELECT SUM(数量), SUM(单价) FROM 表格 GROUP BY 种类 ORDER BY 种类
建议不懂的去学学数据库原理,数据库的结构设计要避免冗余性,统计信息没必要放入数据库结构,
除非有特殊需求或者性能要求
zalvsa
2006-01-12
打赏
举报
回复
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></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];
}
//显示类别合计
}
处理最后一行写的比较笨,看其他学者有没有更好一点的。
pennyhe
2006-01-12
打赏
举报
回复
合计之后怎样保存合计值和显示行?用数组吗?应该怎样记录比较好?
pennyhe
2006-01-12
打赏
举报
回复
呵呵,只是开开玩笑而已!真的很谢谢水米和其他高手的帮助!
ice_berg16
2006-01-11
打赏
举报
回复
看样子只能计算两次了,第一次用于计算每个类别的合计,第二次才循环显示数据
pennyhe
2006-01-11
打赏
举报
回复
可能我表达有点误会了,那个表是显示在页面用的,数据库里不用有合计的那条记录;
按照上边的显示我已经想到方法了(每条记录都判断一下当前类别的值和上一条的类别的值,不同就插入合计行);不过现在又有些改变,显示结构如下:
类别 产品 数量 单价 价格 合计
1 001 10 5 50
1 002 10 6 60
1 003 5 3 15 125
2 004 8 5 40
2 005 6 8 48 88
3 006 2 1 2
。。。
现在要把合计放到本类别的最后一行,这要判断当前行和下一记录的类别,怎样实现呀?
zalvsa
2006-01-11
打赏
举报
回复
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);
//显示类别合计
}
gu1dai
2006-01-11
打赏
举报
回复
合计那行就别插了。单独建个表把。
IOS高仿微信聊天对话界面
模仿微信聊天界面,实现的气泡对话,效果瞒不错的,自己整理的,希望正在做这一块儿的同学
没
头绪
的做个参考。
【秒懂】数据分析
没
头绪
?这七种
高手
常用
统计
分析方法都帮你总结好了!
常见参数检验和非参数检验问题的解决方法及适合应用的情况。
Vue---开发过程中,组件引入后页面无渲染(一直找了好
久
,页面
没
报错,完全
没
头绪
!)
事件的起因:在新年的某一天,
一个
新需求要开发。当我建完分支随便复制了
一个
通用的页面,路由页面的权限都配置好了,但是页面一直不渲染!整整纠结了半天时间,最后和同事一起去确认排除页面写法问题,最终解决了该次事故!!!前言目前百度搜索啥的,搜到的基本都是因为名称大小写或者起名字语义化问题引起的,对应的解决方案基本就是:修改导入变量名或首字母改为大写!!!但是本人遇到的不是那个问题,很奇葩很难发现的
一个
错误!内部错误,不显示在页面的报错!
本人
想
开发一套OA系统,但是毫无
头绪
。求助!!
本人
想
开发一套OA系统,但是毫无
头绪
。谁有这方面的经验给我讲讲,或者有演示程序地址、源代码什么的提供给我参考参考。谢谢了!
形容等待时间长的句子_形容等待很
久
的句子
你微微地笑着不同我说什么话而我觉得为了这个我已等待得很
久
了形容等待很
久
的句子一、也许爱你需要等待很
久
,也许这时间远超过青丝变白发,也许一生无法身披红衣,只是无论最后在哪儿,无论翻过千山万水,无论与多少人接踵擦肩,只要最后是你,我此生无憾。二、确实准备了很
久
也等待了很
久
阳光少年早安三、爸爸妈妈在得知暑假我回不去的消息时脸上一闪而过的失望即便还有很
久
才能回去他们也做好了一切的准备只等待我回去这也是我为...
基础编程
21,891
社区成员
140,342
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章