2013-03-03 51 views
3

我有一个表如下(一块);从MySQL表中选择最大数字表不工作 - PHP

| 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.为什么?

+3

列'NUMBER'的'数据类型'是什么?如果它是varhar而不是填零,那么'9'是最大值。 – 2013-03-03 06:42:26

+1

它只是这样工作:http://sqlfiddle.com/#!2/77f5c/1 – j0k 2013-03-03 06:48:29

+1

如果它实际上返回'9'而不是'00009',你似乎有不在你的表中的数据样品。 – 2013-03-03 06:52:19

回答

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

1

尝试更改查询如下

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

number字段不会出现是一个数字数据类型,而是一个字符串数据类型来代替。您必须将其转换为数字数据类型才能获得正确的结果。试试下面的代码:

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

不能演员。不工作:( – 2013-03-03 07:09:36

0

你表明column数据类型是varcharMAX适用于数字。您需要投射它或更改datatype

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

由于您的号码列不只是数字,而且是零填充的,请尝试降序并获得第一个。

select number from tablename order by number desc limit 1; 
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

+0

它返回9.没有变化 – 2013-03-03 07:09:16

0

这似乎是多种原因(虽然很难解释)。但我用一些笔记'清理'了一些不规范的代码。也许这应该是工作。

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

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; 

这应该这样做:)

0

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