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;

しかし、13ではなく9を返します。なぜですか?

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

次のようにクエリを変更してみてください

$query = 'SELECT NUMBER FROM tablename ORDER BY NUMBER DESC LIMIT 0,1';
于 2013-03-03T06:44:10.620 に答える
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 に答える
0
SELECT MAX(CAST(NUMBER AS UNSIGNED)) FROM tablename
于 2013-03-03T06:48:16.623 に答える
0

数字の列は数字だけでなくゼロで埋められているので、降順で最初の列を取得してみてください。

select number from tablename order by number desc limit 1;
于 2013-03-03T06:51:57.110 に答える
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

それは複数の理由のようです(説明するのは難しいですが)。しかし、私はいくつかのメモでいくつかの不規則性のコードを「クリーンアップ」しました。おそらくこれはうまくいくはずです。

1:NAMEフィールドがVarCharであると仮定すると、CAST関数を使用して数値に変換することをお勧めします。しかし、これは問題ではありません。

2:すべてのレコードを読み取り、ループから印刷しようとしています。まず、ループは必要ありません。MAXは1つのレコードを返すことが期待されるため、ここではループが冗長になります。

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

NUMBERのデータ型は整数または任意の数値データ型である必要があります。再確認してください...クエリは正しいです。

于 2016-05-26T05:44:50.313 に答える