增加查询条件的类库
<?php 
/****************************************************************************** 
 Class Query  
******************************************************************************* 
  
 Purpose: 
  
        To add a logical query to the SearchEngine class. The logic can  
be  
        one of the following : AND , OR, NOT. 

 Usage:         
        aquery = new Query("NOT", array("apple", "pear", "bannana")); 
         
*****************************************************************************/ 

class Query 

//PRIVATE: 

    
var $m_words
    var 
$m_logic

//PUBLIC 

    // 
    // Constructor     
     
    // logic: <AND | OR | NOT> 
    // words: words to be searched for given logic 
     
    
function Query($logic$words) { 
     
        
$this->m_words $words
        
$this->m_logic $logic
    }     
     
    
// print attributes of query 
     
    
function p() { 
     
        echo 
"$this->m_logic"
        
reset($this->m_words); 
        while(list(
$i$word) = each($this->m_words)) 
            echo 
":$word"
    } 
}; 

/****************************************************************************** 
 Class QueryGenerator 
******************************************************************************* 

 purpose:  
          
        Generates selection query strings 
 usage:         
        query1 = new Query("AND", array("rabbit", "horse", "cow")); 
        query2 = new Query("OR",  array("dogs", "cats", "kangaroos")); 
        query3 = new Query("NOT", array("sheep")); 

          querygen = new QueryGenerator(array(query1, query2, query3)); 
        query = querygen->GetQueryString 
("animal_table", "mamals_field", "ID_field"); 
         
        resultid = mysql_query(query);         
        while(row = mysql_fetch_row(resultid)) 
            echo "got row id ",row["ID_field"],"<br>"; 
         
*******************************************************************************/ 

class QueryGenerator 

    var 
$m_Querys
    var 
$m_start
    var 
$m_offset;     
     
    var 
$m_wordmatch
    var 
$m_casematch

//PUBLIC: 

    //  querys   : array of Query objects 
    //  wordmatch: only match whole words 
  
    
function QueryGenerator($Querys$wordmatch=false) { 

        
$this->m_Querys $Querys;     
        
$this->m_wordmatch $wordmatch
        
$this->m_casematch $casematch
         
        
$this->Restrict(0,0); 
    } 
     
    
// start  : start searching data at this pos 
    // offset : number of records to search after pos 
     
    
function Restrict($start$offset) { 
     
        
$this->m_start  $start
        
$this->m_offset $offset;     
    } 
     
    
// table : database table name 
    // searchfield: field(s) to search in for resultfield(s) 
    // resultfield: field(s) retrieved from search match 
    // NOTE: field must be separated by "," eg, "field1,field2" 

    // RETURN: function returns resultfield 
     
    
function GetQueryString($table$searchfield$resultfield="ID") { 
     
        
// get the query string      
        
$query_string $this->BuildQueryString($table$searchfield,  
$resultfield); 
     
        
// append limit         
        
if ($this->m_start || $this->m_offset) { 
            
$query_string .= "LIMIT $this->m_start";     
            if(
$this->m_offset)              
                
$query_string .= ",$this->m_offset"
        } 
                     
        
// exec query         
        
return $query_string
    }     

//PRIVATE: 

    // build where clause 
    
function BuildWhereClause($searchfield$query$wordmatch) { 
        
$query_string.="(";                         
                 
        while(
$word current($query->m_words)) {             
     
         
            if (
$wordmatch
                
$search_type "REGEXP '(^|[^a-zA-Z])$word($
[^a-zA-Z])'"
            else 
                
$search_type "LIKE '%$word%'"
                                         
                 
            if (
$query->m_logic == "NOT")  
                
$query_string.="$searchfield NOT "
            else 
                
$query_string.="$searchfield "
                 
            
$query_string.= $search_type;                 
     
            if (
next($query->m_words))                  
                
$query_string.=" OR "
        }                                 
                                 
        
$query_string.=")";                         
                                 
        return 
$query_string
    } 
     
    
// main function that generates the entire query 
    
function BuildQueryString($table$searchfield$resultfield) { 

        
// begin query string 
        
$query_string "SELECT $resultfield FROM $table WHERE "
         
        
// parse searchfields 
        
$searchfields explode(","$searchfield);         
        if(!
is_array($searchfields))  
            
$searchfields=array($searchfield); 
                     
        
// build query for each searchfield 
        
while ($searchfield current($searchfields)) { 

            
$firstquery true
            
$query_string .= "("
             
            
// build current query 
            
reset($this->m_Querys);                     
         
            while(
$query current($this->m_Querys)) {         
                     
                 
                
// append logic             
                
if ($firstquery
                    
$firstquery=false
                else if (
$query->m_logic == "NOT"
                    
$query_string.="AND";     
                else 
                    
$query_string.=$query->m_logic;          
                             
                         
                
// append where clause 
                
$query_string .=  
                
$this->BuildWhereClause($searchfield$query,  
$this->m_wordmatch);                                 
                 
                
next($this->m_Querys); 
            } 
            
$query_string .=")";                     
             
            if (
next($searchfields)) 
                
$query_string .= "OR";     
        }                                 
     
        return 
$query_string
    } 
};     

?>