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 KB 现在当用户写完全像 124.25 然后搜索工作,但我希望该用户不写完全相同。用户也可以写 124 而不是 124.54,当用户写 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的。

另一件需要注意的是 KiB 与 KB。

于 2012-09-13T11:01:06.170 回答