按某列的相同值,求出这些行对应的另一列的最大值,用MYSQL加PHP完成 5
我的MYSQL中的B表(id2是唯一值,自动递增)id2|id1|c1|......1|1|y|......2|1|x|......3|1|z|......4|2|x|....
我的MYSQL中的B表(id2是唯一值,自动递增)
id2 | id1 | c1 | ......
1 | 1 | y | ......
2 | 1 | x | ......
3 | 1 | z | ......
4 | 2 | x | ......
5 | 3 | y | ......
6 | 3 | y | ......
......
我的PHP部分
SQL = select *
from B表 b
left join A表 a on (......)
left join C表 c on (......)
left join D表 d on (......)
left join ......
where ...... 这里不能随便加条件,否则会影响我其它表输出值的
group by b.id2
order by a.id1, b.id2
<table><tr>
<td>echo 'id1'</td>
<td>echo 'id2'</td>
<td>echo 'a'</td>
<td>echo 'max a'</td>
<td>echo 'c1'</td>
<td>其它列的标题</td>
</tr></table>
while($row = mysql_fetch_array($result)){
<table><tr>
<td>row['id1']</td>
<td>row['id2']<</td>
<td>$a</td>
<td>$max_a</td>
<td>row['c1']<</td>
<td>与其它多张表关联的一些值</td>
</tr></table>
}
提示:
$a 是我已经用各函数对应每行id2求得的值,这个不用再去研究了
数据表B表是经常自动插入记录的
要求:
需要求出的值就是$max_a,这个值是如何来的呢?
因为id2是唯一值,但id1不是唯一值,相同的id1会对应1个或多个不同id2,
每个id2会对应1个$a的值(这个我已经搞定)
$max_a 是对相同的id1求所对应的所有$a的最大值
如果id2对应的$a的值如下(以下只是举例,$a是变量,其实是根据每条新插入的记录各值关系算出的)
id2 | $a
1 | 100
2 | 300
3 | 200
4 | 500
5 | 400
6 | 600
那么,得到的最终显示结果应该如下
id1 | id2 | a | max a | c1 | ......
1 | 1 | 100 | 300 | ......
1 | 2 | 300 | 300 | ......
1 | 3 | 200 | 300 | ......
2 | 4 | 500 | 500 | ......
3 | 5 | 400 | 600 | ......
3 | 6 | 600 | 600 | ......
......
现在就是不知道$max_a的函数或关系式该如何写
请在while的关闭符 “}” 之前写,不要在关闭符之后再用print,否则我不知道如何和我现有其它关联内容一起用
另一个小提示,c1那列都是text内容,我B表有很多列c2, c3, c4, c5 ......因为和这个问题并没什么关系,我就不全写出来了。当然,我还有很多表作关联的,A表,B表,C表,D表 ...... 这些我就不具体些了
回答时,希望能写详细的完整代码,谢谢
看来高手还是少啊 展开
id2 | id1 | c1 | ......
1 | 1 | y | ......
2 | 1 | x | ......
3 | 1 | z | ......
4 | 2 | x | ......
5 | 3 | y | ......
6 | 3 | y | ......
......
我的PHP部分
SQL = select *
from B表 b
left join A表 a on (......)
left join C表 c on (......)
left join D表 d on (......)
left join ......
where ...... 这里不能随便加条件,否则会影响我其它表输出值的
group by b.id2
order by a.id1, b.id2
<table><tr>
<td>echo 'id1'</td>
<td>echo 'id2'</td>
<td>echo 'a'</td>
<td>echo 'max a'</td>
<td>echo 'c1'</td>
<td>其它列的标题</td>
</tr></table>
while($row = mysql_fetch_array($result)){
<table><tr>
<td>row['id1']</td>
<td>row['id2']<</td>
<td>$a</td>
<td>$max_a</td>
<td>row['c1']<</td>
<td>与其它多张表关联的一些值</td>
</tr></table>
}
提示:
$a 是我已经用各函数对应每行id2求得的值,这个不用再去研究了
数据表B表是经常自动插入记录的
要求:
需要求出的值就是$max_a,这个值是如何来的呢?
因为id2是唯一值,但id1不是唯一值,相同的id1会对应1个或多个不同id2,
每个id2会对应1个$a的值(这个我已经搞定)
$max_a 是对相同的id1求所对应的所有$a的最大值
如果id2对应的$a的值如下(以下只是举例,$a是变量,其实是根据每条新插入的记录各值关系算出的)
id2 | $a
1 | 100
2 | 300
3 | 200
4 | 500
5 | 400
6 | 600
那么,得到的最终显示结果应该如下
id1 | id2 | a | max a | c1 | ......
1 | 1 | 100 | 300 | ......
1 | 2 | 300 | 300 | ......
1 | 3 | 200 | 300 | ......
2 | 4 | 500 | 500 | ......
3 | 5 | 400 | 600 | ......
3 | 6 | 600 | 600 | ......
......
现在就是不知道$max_a的函数或关系式该如何写
请在while的关闭符 “}” 之前写,不要在关闭符之后再用print,否则我不知道如何和我现有其它关联内容一起用
另一个小提示,c1那列都是text内容,我B表有很多列c2, c3, c4, c5 ......因为和这个问题并没什么关系,我就不全写出来了。当然,我还有很多表作关联的,A表,B表,C表,D表 ...... 这些我就不具体些了
回答时,希望能写详细的完整代码,谢谢
看来高手还是少啊 展开
1个回答
展开全部
你能不能先把B表简化下??
select * from B a inner join (select *,max(c1) as c1 from B b group by id1) b on a.id2=b.id2
这个相当于从所有B中查出符合要求的 ,然后在用这个去链接查询其他的信息
select * from B a inner join (select *,max(c1) as c1 from B b group by id1) b on a.id2=b.id2
这个相当于从所有B中查出符合要求的 ,然后在用这个去链接查询其他的信息
更多追问追答
追问
完全没明白为什么用max(c1)?我的c1是text内容,和我要求的$a的最大值完全没有关系啊
可否根据我的提问,完整的写一下解答呢?谢谢
追答
你不是要找最大值吗? 这个就是放最大值字段的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询