求助php+mysql 操作数据库
我有这样一个数据表A:班级学号数学成绩601001985010035830200294601012786010057440300688403011684030049760...
我有这样一个数据表A:
班级 学号 数学成绩
601 001 98
501 003 58
302 002 94
601 012 78
601 005 74
403 006 88
403 011 68
403 004 97
601 008 84
504 001 86
504 005 77
302 006 87
302 017 65
403 012 96
504 004 64
302 001 87
601 009 91
... ... ...
希望用php语言结合MYSQL能对此数据表做如下操作:
取出每一个班级的数学成绩的最高分scoreH,并与此班级其他每一个同学的成绩进行比较,如果scoreH/其他同学的成绩>0.6(即比值大于0.6),则将分母上的这个同学的整条记录从这个表A中删去.否则对表A不进行任何操作
注:要求对每个班级都进行同样的操作。 展开
班级 学号 数学成绩
601 001 98
501 003 58
302 002 94
601 012 78
601 005 74
403 006 88
403 011 68
403 004 97
601 008 84
504 001 86
504 005 77
302 006 87
302 017 65
403 012 96
504 004 64
302 001 87
601 009 91
... ... ...
希望用php语言结合MYSQL能对此数据表做如下操作:
取出每一个班级的数学成绩的最高分scoreH,并与此班级其他每一个同学的成绩进行比较,如果scoreH/其他同学的成绩>0.6(即比值大于0.6),则将分母上的这个同学的整条记录从这个表A中删去.否则对表A不进行任何操作
注:要求对每个班级都进行同样的操作。 展开
3个回答
展开全部
你是否已经建立数据表呢?如果不会建立可以留下QQ我帮你..
下面是我假定你已经建立数据表,并且单元名是我假设的,php代码你看着改
数据表名为 : mark
班级:class 学号:sid 分数:mark
<?php
// 数据库链接以及筛选数据库我就不写了,如果不会可以留下QQ.. 假设数据库连接信息为$link
$query_class = mysql_query("SELECT DISTINCT class FROM mark");
while ($class = mysql_fetch_array($query)) {
$query_top = mysql_query("SELECT mark, COUNT(*) FROM mark WHERE $class['class'] ORDER BY mark DESC LIMIT 0,1");
$topmark = mysql_result($query_top, 0);
$count = mysql_result(query_top, 1) - 1;
$query_other = mysql_query("SELECT mark,sid FROM mark WHERE $class['class'] ORDER BY mark DESC LIMIT 1,$count");
while ( $mark = mysql_fetch_array($query_other) ) {
$othermark = mysql_result($query_other, 0);
$sid = mysql_result($query_other, 1);
if ( ($topmark/$othermark) > 0.6 ) {
mysql_query("DELETE FROM mark WHERE class = $class['class'] AND sid = $sid");
}
}
}
?>
这样应该可以了~因为直接在这个框框里面写可能有点乱
如果不行的话留下QQ我联系你解决..
下面是我假定你已经建立数据表,并且单元名是我假设的,php代码你看着改
数据表名为 : mark
班级:class 学号:sid 分数:mark
<?php
// 数据库链接以及筛选数据库我就不写了,如果不会可以留下QQ.. 假设数据库连接信息为$link
$query_class = mysql_query("SELECT DISTINCT class FROM mark");
while ($class = mysql_fetch_array($query)) {
$query_top = mysql_query("SELECT mark, COUNT(*) FROM mark WHERE $class['class'] ORDER BY mark DESC LIMIT 0,1");
$topmark = mysql_result($query_top, 0);
$count = mysql_result(query_top, 1) - 1;
$query_other = mysql_query("SELECT mark,sid FROM mark WHERE $class['class'] ORDER BY mark DESC LIMIT 1,$count");
while ( $mark = mysql_fetch_array($query_other) ) {
$othermark = mysql_result($query_other, 0);
$sid = mysql_result($query_other, 1);
if ( ($topmark/$othermark) > 0.6 ) {
mysql_query("DELETE FROM mark WHERE class = $class['class'] AND sid = $sid");
}
}
}
?>
这样应该可以了~因为直接在这个框框里面写可能有点乱
如果不行的话留下QQ我联系你解决..
追问
思路很清晰,有几个地方,不知道我改的对不对
while ($class = mysql_fetch_array($query)) -》while ($class = mysql_fetch_array($query_class ))
$count = mysql_result(query_top, 1) - 1;-》$count = mysql_result($query_top, 1) - 1;
另外想请教一下
$othermark = mysql_result($query_other, 0);
$sid = mysql_result($query_other, 1);
这里括号里的0和1的意义,请赐教
追答
嗯..改对了,我写的那个没有仔细看.. 你把我错误的地方改出来了
0的话是取第一个,也就是取找出的第一个..
1的话是取第二个,找出后的第二个...
select xxx,zzz from
这句里面
0指的是xxx
1指的是zzz
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询