2013-07-30 41 views
1

我需要获得某列的最大值。这是我的代码,我得到了一个turorial。MySQL列中的最大值PHP

$query = "SELECT type, MAX(ID) FROM sessions GROUP BY Status"; 

$result = mysql_query($con, $query) or die(mysql_error()); 

// Print out result 
while($row = mysql_fetch_array($result)){ 
echo "The biggest session ID is " .$row['MAX(ID)']; 
echo "<br />"; 
} 

我需要得到表中最大的ID号。状态只是另一列,我认为这与查找ID列中的最大数字无关。我究竟做错了什么?

+9

[**请不要在新代码中使用'mysql_ *'函数**](http://bit.ly/phpmsql)。他们不再被维护[并且被正式弃用](http://j.mp/XqV7Lp)。看到[**红框**](http://j.mp/Te9zIL)?学习[*准备的语句*](http://j.mp/T9hLWi),并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [这篇文章](http://j.mp/QEx8IB)将帮助你决定哪个。如果你选择PDO,[这里是一个很好的教程](http://j.mp/PoWehJ)。 – Neal

+1

@关闭主题,但有没有真正有理由选择mysqli(over pdo)?它更值得一提吗?新手应该使用pdo,这样mysqli可以消失。 – sgroves

+1

@sgroves有**没有错误**与'mysqli_ *' – Neal

回答

5

如果您正在寻找在表中最大的ID查询应该是:

SELECT max(ID) from sessions; 

你GROUP BY列会给你最大的ID为状态的每一个独特的价值,如果你是通过分组状态以获得任何有意义的结果,您也应该将其作为选择字段之一。

SELECT Status, max(ID) from sessions group by Status 
0

将您的MAX(ID)函数调用到查询中的列名称;

SELECT type, MAX(ID) AS max_id FROM sessions GROUP BY status 
0

如果你想从特定行拥有最大的id完整的数据,你可以这样做:

$query = "SELECT type, MAX(ID) 
      FROM sessions 
      WHERE ID = MAX(ID) 
      GROUP BY Status"; 
0

状态只是另一列,我认为应该是无关找到ID列中的最大数字。

的问题是,MAX()是一个聚合函数将返回最大ID 每组按您GROUP BY条款。所以SELECT type, MAX(ID)然后GROUP BY Status没有意义。如果你想要每个类型的最大ID,你想要GROUP BY type

除了在非常罕见的高级情况下可以滥用功能,选择一个列(如type),然后GROUP BY其他东西(如Status)无效。事实上,大多数数据库不允许你这样做;有些人认为它是一个bug /坏功能,mysql允许这种类型的查询。