在字节中搜索千字节

时间:2012-09-13 10:50:46

标签: php

我有一个列名为= recording_size的表。 在本专栏中,我将以字节为单位存储大小, 但是在网上我以KB显示大小。

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

现在我在网上有一个过滤功能。因此,当我以KB为单位显示大小时,我肯定会从用户的KB&中获取用于搜索的输入。不是以字节为单位虽然在DB中我有以字节为单位。为此,我以KB为单位输入,然后将其再次转换为字节,如:

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

示例:

size in Bytes = 127232

当我应用我的功能时它= 124.25 KB 现在当用户写完全像124.25时,搜索工作, 但我希望那个用户写的不完全相同。 用户也可以写124而不是124.54,当用户写124时,我的搜索不起作用 - 这意味着它不显示任何记录。 我也有ADD&从转换的字节中减去50,但它不起作用。

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

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

无论如何,搜索大小应该是一个范围而不是相等。至少,默认值应该是范围,除非您的应用主要关注的是确切大小。对于SQL:

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

顺便说一句,你应该省略引号(")。即使是字符串,它们也是无效/非标准的。你正在比较int

值得关注的另一件事是KiB vs KB。