0

列名 = recording_size のテーブルがあります。この列ではサイズをバイト単位で保存していますが、Web ではサイズを KB 単位で表示しています。

       public static function getKbFromBytes($string){
         if($string){
            return ($string/1024);
          }
       }

これで、Web にフィルター機能が追加されました。したがって、サイズをKBで表示しているので、ユーザーからの検索の入力をバイト単位ではなくKB単位で取得しますが、DBではバイト単位で取得します。そのために、入力を KB で取得し、次のように再度バイトに変換します。

    public static function getBytesFromKb($string){
        if($string){
         return ($string * 1024);
       }
    }

例:

size in Bytes = 127232

関数を適用すると、ユーザーが 124.25 とまったく同じように書き込むと = 124.25 KB になり、検索は機能しますが、ユーザーがまったく同じように書きたくないのです。ユーザーは 124.54 の代わりに 124 を書き込むこともできます。ユーザーが 124 を書き込むと、検索が機能しなくなります。つまり、レコードが表示されません。また、変換されたバイトから 50 を加算および減算しましたが、機能していません。

   $sql = $sql->where('r.recording_size BETWEEN "'.(Engine::getBytesFromKb($opt['sn']) - 50) .'" AND "'.(Engine::getBytesFromKb($opt['sn']) + 50) .'"');

どうすればこれを達成できますか?

4

1 に答える 1

1

とにかく、サイズの検索は、おそらく等値ではなく範囲として行う必要があります。少なくとも、アプリの主な焦点が正確なサイズでない限り、デフォルトは範囲にする必要があります。SQL の場合:

$kb = round($opt['sn']);
$sql = $sql->where('r.recording_size BETWEEN '.($kb * 1024).' AND '.(($kb + 1) * 1024));

なお、引用符 ( ") は省略してください。文字列に対しても無効/非標準です。そして、あなたは を比較していますint

もう 1 つ注目すべき点は、KiB と KB です。

于 2012-09-13T11:01:06.170 に答える