2013-08-22 3 views
1

내 웹 페이지에 대한 검색 기능을 개발하려고합니다. 데이터베이스의 일부 열은 값을 나타내는 정수로 저장됩니다. 결과를 반환 할 때 나는이를 표시하는 기능을 가지고 :이 열을 검색하고 결과를 반환 할 수 있도록하려면저장된 int에 PHP 검색 문자열

public function listsystypestatus($sysobj){ 

if ($this->sysobj ==='1') return "Core"; 
if ($this->sysobj ==='2') return "Aggregation"; 
if ($this->sysobj ==='3') return "Core/Aggr"; 
if ($this->sysobj ==='4') return "Customer"; 
if ($this->sysobj ==='5') return "TX Site"; 
return "--Please Select--"; 

합니다. 예를 들어 "Cus"에서 와일드 카드 검색을 수행하고이 열의 db에 "4"로 저장된 모든 레코드를 반환합니다. 어떻게 접근 할 수 있는지 잘 모르겠습니다.

내 검색 쿼리는 다른 (문자열) 필드 작동합니다

if($action=='search' && $search!=NULL){ 


$wildsearch = "%%$search%%"; 
    $query = "SELECT *, INET_NTOA(ip_add) AS ip_add 
    FROM `equipment` 
    LEFT JOIN itam_asset on equipment.itamname=itam_asset.ASSETID 
    WHERE site_code LIKE :search 
    OR site_id LIKE :search 
    OR system_name LIKE :search 
    OR INET_NTOA(ip_add) LIKE :search 
    OR sys_loc LIKE :search 
    OR systype LIKE :search 
    OR itamname LIKE :search 
    OR dimetis LIKE :search 
    OR DNS LIKE :search 
    "; 

//Get equipment data 
//select and prepare 
$database->query($query); 
//Bind 
$database->bind(':search',$wildsearch); 
    }else{ 
    .... 
    .... 
    Display results 

내가 반환 된 결과를 표시하기 위해 사용하는 코드는 다음과 같습니다 모든

<?php 
foreach($rows as $row){ 

//extract row 
//this will make $row['firstname'] to 
//just $firstname only 
extract($row); 
... 
... 
echo reults 
... 
... 

감사합니다.

편집 : 새로운 쿼리 - 이제 작동 : 나는 당신을 잘 이해한다면 당신은 "기분이야", "4", "고객"때문에 검색하면

$query = "SELECT *, INET_NTOA(ip_add) AS ip_add, list_systype.systype_label 
     FROM `equipment` 
     LEFT JOIN itam_asset on equipment.itamname=itam_asset.ASSETID 
     LEFT JOIN list_systype on equipment.systype=list_systype.systype_value 
     WHERE site_code LIKE :search 
     OR site_id LIKE :search 
     OR system_name LIKE :search 
     OR INET_NTOA(ip_add) LIKE :search 
     OR sys_loc LIKE :search 
     OR list_systype.systype_label LIKE :search 
     OR itamname LIKE :search 
     OR dimetis LIKE :search 
     OR DNS LIKE :search 
     "; 
+1

, 당신은 사람들을 통해 자신을 검색하고 결과 INT와 SQL 쿼리를 실행해야합니다. 그렇지 않으면 ID-> 문자열 목록을 별도의 테이블에있는 데이터베이스로 이동하고 검색을 위해 해당 int 열에 JOIN을 수행하십시오. – mario

+0

감사. 위의 쿼리를 수정하고 이제는 훌륭하게 작동합니다.) .... 감사합니다. – Nigel

답변

0

, 당신은 "4"를 검색하려면 listsystypestatus 함수에서 이렇게하려면 다음이 필요합니다 일치하는 상태

  1. 봐, 그것에 연결된 번호를 알아
  2. 주제에 그 정수

에 따라 데이터베이스의 관련 항목에 대한

  • 봐 2, 당신은 아마 단지 sysobj 필드를 검색하기 위해 쿼리를 제한 할 수 있습니다.

    나는 조금 당신의 listsystypestatus 논리를 다시 것입니다, 그래서 당신은 검색을 다시 사용할 수 있습니다.

    class Test { 
    
        // Your type 
        private $systypes = array('1' => 'Core', '2' => 'Aggregation', '3' => 'Core/aggr', '4' => 'Customer', '5' => 'TX Site'); 
    
        public function listsystypestatus($sysobj) { 
        var_dump(array_key_exists($sysobj, $this->systypes)); 
        if(array_key_exists((int)$sysobj, $this->systypes)) { 
         return $this->systypes[$sysobj]; 
        } 
        return "--Please Select--"; 
        } 
    
        // Retrieve the type 
        public function gettype($search) { 
        $matches = array_filter($this->systypes, function($text) use ($search) { 
         return (strpos($text, $search) !== false); 
        }); 
    
        return array_keys($matches); 
        } 
    } 
    
    $test = new Test(); 
    
    // Retrieving records for 'Cus' (only one, 4) 
    var_dump($test->gettype('Cus')); 
    
    // Few more hits now 
    $result = $test->gettype('C'); 
    var_dump(implode(',', $result)); 
    

    결과 배열을 사용하여 SQL 쿼리에서 수행 할 작업을 결정할 수 있습니다. 예를 들어, 배열의 모든 값 또는 비슷한 값에 대해 IN (1,2,3)을 수행하십시오. 당신은 PHP에서 ID-> 문자열 연결을 유지하는 경우

  • +0

    물론 데이터베이스에서 문제를 해결할 수 있다면 더 좋은 해결책이 될 것입니다. – ranieuwe

    +0

    피드백을 보내 주셔서 감사합니다. 저는 여전히 OOP에 관한 일반적인 생각을하고 있습니다. 나는 당신의 제안을 통해 일할 시간이 없었지만, 그들은 매우 유용하게 보였다. 나는 기회가 생길 때 그들을 구현할 것이다. BTW 별도의 테이블을 가지고 Mario가 제안한대로 조인하여 검색 문제를 해결했습니다. – Nigel

    +0

    이 대답을 유용하다고 생각한다면 답변을 수락하십시오. 감사! – ranieuwe

    관련 문제