4

我有一张像下面这样的桌子(一块);

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

4

9 回答 9

4

您指出column数据类型是varcharMAX适用于数字。您将需要强制转换或更改datatype.

$query = 'SELECT MAX(CAST(NUMBER as UNSIGNED)) FROM tablename';
于 2013-03-03T06:48:44.327 回答
3

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

$query = 'SELECT MAX(CAST(NUMBER as Int(12))) FROM tablename';
于 2013-03-03T06:46:52.103 回答
1

使用此查询

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

SQL 小提琴演示

于 2013-03-03T07:12:44.000 回答
1

尝试按如下方式更改查询

$query = 'SELECT NUMBER FROM tablename ORDER BY NUMBER DESC LIMIT 0,1';
于 2013-03-03T06:44:10.620 回答
0

这似乎是多种原因(尽管很难解释)。但是我已经用一些注释“清理”了一些违规行为的代码。也许这应该起作用。

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

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

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;

这应该这样做:)

于 2013-03-03T07:08:38.593 回答
0

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

select number from tablename order by number desc limit 1;
于 2013-03-03T06:51:57.110 回答
0
SELECT MAX(CAST(NUMBER AS UNSIGNED)) FROM tablename
于 2013-03-03T06:48:16.623 回答
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

于 2013-03-03T06:57:19.603 回答
0

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

于 2016-05-26T05:44:50.313 回答