2012-09-13 3 views
0

열 이름이 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 똑같이 쓸 때 현재 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) .'"'); 

어떻게하면됩니까?

답변

1

크기 검색은 어쨌든 평등 대신 범위로 지정해야합니다. 적어도 앱의 기본 포커스가 정확한 크기가 아니라면 기본값이 범위 여야합니다. 는 SQL의 경우 :

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

그런데, 당신은 인용 부호 (")를 생략한다. 문자열에 대해서도 유효하지 않거나 비표준입니다. 그리고 당신은 int을 비교하고 있습니다.

또 다른 것은 KiB와 KB입니다.

관련 문제