从MySQL表中选择MAX数不起作用 - PHP

时间:2013-03-03 06:40:09

标签: php mysql

我有一张如下表(一张);

| Sl | NUMBER | Name |
----------------------
| 7  | 00007  | Name |
----------------------
| 8  | 00008  | Name |
----------------------
| 9  | 00009  | Name |
----------------------
| 10 | 00010  | Name |
----------------------
| 11 | 00011  | Name |
----------------------
| 12 | 00012  | Name |
----------------------
| 13 | 00013  | Name |
----------------------

我有这样的mysql语句;

$con = mysql_connect("localhost","root","password");
if (!$con){
  die('Could not connect: ' . mysql_error());
}
mysql_select_db("dbname", $con);
$query = 'SELECT MAX(NUMBER) FROM tablename';//varchar 15 entry
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
    $maxnumber = $row['MAX(NUMBER)'];
}
echo $maxnumber;

但它返回9而不是13.为什么?

9 个答案:

答案 0 :(得分:1)

尝试更改查询,如下所示

$query = 'SELECT NUMBER FROM tablename ORDER BY NUMBER DESC LIMIT 0,1';

答案 1 :(得分:1)

您的number字段似乎不是数字数据类型,而是字符串数据类型。您必须将其转换为数字数据类型才能获得正确的结果。请尝试以下代码:

$query = 'SELECT MAX(CAST(NUMBER as Int(12))) FROM tablename';

答案 2 :(得分:1)

使用此查询

SELECT 
    *
FROM tablename AS t
INNER JOIN (SELECT MAX(SL) AS SL FROM tablename) AS r ON r.SL = t.SL

SQL Fiddle Demo

答案 3 :(得分:0)

SELECT MAX(CAST(NUMBER AS UNSIGNED)) FROM tablename

答案 4 :(得分:0)

您表明column数据类型为varcharMAX适用于数字。您需要将其强制转换或更改datatype

$query = 'SELECT MAX(CAST(NUMBER as UNSIGNED)) FROM tablename';

答案 5 :(得分:0)

由于您的数字列不仅仅是数字而是零填充,请尝试下降并获取第一个。

select number from tablename order by number desc limit 1;

答案 6 :(得分:0)

试试这个:

$query = 'SELECT MAX(NUMBER) as NUMBER FROM test';//varchar 15 entry
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
    $maxnumber = $row['NUMBER'];
}
echo $maxnumber;

返回00013

答案 7 :(得分:0)

似乎有多种原因(虽然难以解释)。但我用一些笔记“清理”了一些不规范的代码。也许这应该有效。

1:假设NAME字段是VarChar,最好使用CAST函数将其转换为numberic。但这不是问题。

2:您正在阅读所有记录并尝试打印出循环。首先,您不需要循环。由于MAX预计会返回一条记录,因此这里的循环是多余的。

3:使用MAX这样的函数时,最好将结果值转换为另一个变量。但这不是问题。这更像是“清理”代码的建议。

现在回答......修改后的代码应该是这样的:

$query = 'SELECT MAX(NUMBER) As M FROM tablename';//varchar 15 entry
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result)
$maxnumber = $row['M'];

echo $maxnumber;

这应该这样做:)

答案 8 :(得分:0)

NUMBER的数据类型必须是Integer或任何数值数据类型,请重新检查... 你的查询是正确的。