Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查找MySQL group by的最大值并将其分配给变量_Php_Mysql_Group By_Max - Fatal编程技术网

Php 查找MySQL group by的最大值并将其分配给变量

Php 查找MySQL group by的最大值并将其分配给变量,php,mysql,group-by,max,Php,Mysql,Group By,Max,我有一个MySQL表,叫做圆柱体。其中两列是pid和reportno 我想为一个组找到最高的reportno,以便使用下一个reportno添加到表中 我有这个: $query = "SELECT * FROM cylinders GROUP BY pid ORDER BY reportno DESC LIMIT 1"; $result = mysql_query($query); $row = mysql_fetch_array($result); $lastrpt = $row["repor

我有一个MySQL表,叫做圆柱体。其中两列是pid和reportno

我想为一个组找到最高的reportno,以便使用下一个reportno添加到表中

我有这个:

$query = "SELECT * FROM cylinders GROUP BY pid ORDER BY reportno DESC LIMIT 1";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$lastrpt = $row["reportno"];
$nextrpt = $lastprt + 1;

但是$lastrpt变量的值为0。我做错了什么?

我认为查询不起作用,因为您必须将reportno添加到group by子句或在聚合中使用它。尝试以下方法

SELECT pid, MAX(ReportNo) FROM cylinders GROUP BY pid ORDER BY reportno DESC LIMIT 1

由于您需要最高级别的报告,因此可以在没有GROUP BY的情况下执行此操作No-

更新


您可以在一个查询中添加一行并查找最高的reportno:

INSERT INTO cylinders (pid, reportno)
SELECT '13-2021', MAX(reportno) + 1 FROM cylinders
WHERE pid='13-2021';
您不应该使用mysql\u查询,它已被弃用。改用mysqli_查询


编辑:根据评论更改

您想要最高的报告否?为什么需要组?对于相同的数据,您的预期结果是什么?请注意,对于MyISAM表,您可以将两列定义为复合、自动递增PK的组件。那么MySQL会为你做剩下的。对,问题不清楚。我需要最高的pid报告编号。因此,我需要一个查询,该查询返回一行,其中包含特定pid的pid和max reportno。例如,从上表中,我想找到pid=13-2021的max reportno。实际的表大约有20000行。PS谢谢你迄今为止的回答,我很不好意思承认我已经花了多长时间试图弄清楚这个问题。$lastrpt是一个数组,所以你不能只向其中添加1。它应该是$nextrpt=$lastprt['max_reportno']+1;是的,但我只需要一个特定pid的最高气缸,比如13-2021。好的,谢谢!如何从生成的2列数组中检索特定pid的reportno?
SELECT MAX(REPORTNO) FROM CYLINDERS;
SELECT * FROM cylinders ORDER BY reportno DESC LIMIT 1
SELECT pid, MAX(reportno) max_reportno FROM cylinders GROUP BY pid ORDER BY max_reportno DESC LIMIT 1
INSERT INTO cylinders (pid, reportno)
SELECT '13-2021', MAX(reportno) + 1 FROM cylinders
WHERE pid='13-2021';