1 つのテーブルといくつかのフィールドを持つ単純なデータベースがあります。そのうちの 1 つは、常に同じアルファ プレフィックスの後に 3 文字のプレイヤー名と 1 から 100 の範囲の番号が続くテキスト フィールドです。
テキスト レコードは次のようになります。これは、サード パーティ アプリケーションで生成された .txt ファイルから LOAD LOCAL INFILE コマンドを実行した結果です。
グランドチャンピオン MAC 1,180,611,620
トップアングラー 1) MAC 963,956,660 2) MAC 777,545,450 3) MAC 774,563,200 4) MAC 659,721,170
最大の嘘つき DVA 6 フィッシュ 4 テイルズ
トップ ボート ロッカー MAC 24 ロック ボート
PHP を使用して、DVA に続く数値を整数に変換し、最大から最小に並べ替えようとしています。BIGGEST LIAR から 4 tales までのブロックのみを表示する私の PHP コードは次のとおりです。
$data = mysql_query("SELECT * FROM stats WHERE tablestats LIKE '%biggest liar%' ORDER BY CONVERT(SUBSTRING(tablestats, LOCATE('LIAR', tablestats) +5), SIGNED INTEGER),tablestats DESC LIMIT 5;")
or die(mysql_error());
while($info = mysql_fetch_array( $data ))
{
echo substr($info['tablestats'],151,40);
Print "<br>";
}
?>
これにより、探しているテキストを含むページが生成され、最終的に次のようにレンダリングされます
最大の嘘つき DVA 6 フィッシュ 4 テイルズ
ただし、3 文字のユーザー名に続く変数が変更される複数のレコードでは、DESC による順序付けが正しく機能しないようです。数字が単数 (1 から 9) の場合は問題ないように見えますが、値が 10 を超える場合、1 つのレコードが 6 でもう 1 つのレコードが 10 の場合、10 より前に 6 がリストされることに気付きました。
私がここでやろうとしているのは、3 文字のユーザー名の後に 1 つのスペースに続いて数値を指定することです。これは、ここでの数値が 1 から 100 になる可能性があることを考慮して、それを整数と順序に変換することです。
どんな助けでも大歓迎です、
トニー。