SoFunction
Updated on 2025-03-09

PHP+Mysql implements functions to generate SQL statements with multiple keywords and multiple fields

function search($keyword,$table,$field) 

//======================================================== 
 
//Montal parameters description:
//keyword is a keyword, such as "Beijing Capital Direction Train". With space or without
//table is the table name, such as enter_gongyin_pic.
//field is a field combination. If you look for a field, write it name
//If you search for more than two, use name+picdir
//======================================================== 
//First determine the field
$new_field=explode("+",$field); //Press + strip
$field_count=count($new_field); //The number of results obtained
 
 
$newstring=explode(" ",$keyword); //Strip it by space
$newstring2=array(); 
//Remove the useless spaces of the string.
   $i=0; 
   foreach ($newstring as $key => $value) { 
   if($value!="") 
   { 
   $newstring2[$i]=$value; 
   $i++; 
   } 
   } 
// Remove the useless spaces of the string,
         
$result_count=count($newstring2); //The number of results obtained
 
//The following generates SQL statement
 
 
//************************ if($field_count==1) //Find 1 field START *********************************
if($field_count==1) //Find 1 field

if($result_count==1) //Judge if it is a key segment
   { 
   $newstring_search=$newstring2[0]; 
$sql="SELECT *  
FROM `$table`  
WHERE `".$new_field[0]."` LIKE '%$newstring_search%'"; 
   } 
      
if($result_count>1) //Judge if it is multiple key segments
   { 
 
$sql="SELECT *  
FROM `$table`  
WHERE "; 
$sql_add=""; 
foreach ($newstring2 as $key => $value) 

  if($key==0) 
   { 
   $sql_add=$sql_add."`".$new_field[0]."` LIKE '%".$value."%'"; 
   } 
   else 
   { 
   $sql_add=$sql_add." OR `".$new_field[0]."` LIKE '%".$value."%'"; 
     
        } 
         
          } 
   
$sql=$sql.$sql_add; 

 

 
//************************ if($field_count==1) //Find 1 field END *********************************************
 
 
//************************ if($field_count>1) //Find multiple fields START ******************************************
if($field_count>1) //Find multiple fields, at this time $new_field is an array. Have multiple fields

if($result_count==1) //Judge if it is a key segment

$newstring_search=$newstring2[0]; //$newstring_search is the keyword
        $sql="SELECT *  
        FROM `$table`  
        WHERE "; 
$sql_add="";//New fields added
        foreach ($new_field as $key => $value) 
        { 
                        if($key==0) 
                        { 
                        $sql_add=$sql_add."`".$value."` LIKE '%".$newstring_search."%'"; 
                        } 
                        else 
                        { 
                        $sql_add=$sql_add." OR `".$value."` LIKE '%".$newstring_search."%'"; 
                        } 
        } 
        $sql=$sql.$sql_add; 

if($result_count>1) //Judge if it is multiple key segments (multiple keywords) ==============================================

$sql="SELECT *  
FROM `$table`  
WHERE "; 
$sql_add="";//New fields are added
foreach ($new_field as $key => $value) 

if($key==0) //When encountering $new_field[0] Example: `a` LIKE '%1%' OR `a` LIKE '%2%' OR `a` LIKE '%3%'
{ //Nested foreach
     foreach ($newstring2 as $key2 => $value2) 
      { 
                  if($key2==0) 
                   { 
                        $sql_add=$sql_add."`".$value."` LIKE '%".$value2."%'"; 
                   } 
                   else 
                   { 
                   $sql_add=$sql_add." OR `".$value."` LIKE '%".$value2."%'"; 
                   } 
        } 
//Nested foreach
   } 
   else  
//(If it is multi-field, for example, look up the name+picdir table) Start FOREACH continuous loop, and execute ELSE $new_field[1] $new_field[2] $new_field[3] each time.
//The corresponding value is $value
  { 
//Nested foreach (multiple fields and multiple keywords)
   foreach ($newstring2 as $key2 => $value2) 
      { 
                  if($key2==0) 
                   { 
                        $sql_add=$sql_add." OR `".$value."` LIKE '%".$value2."%'"; 
                   } 
                   else 
                   { 
                   $sql_add=$sql_add." OR `".$value."` LIKE '%".$value2."%'"; 
                   } 
           } 
//Nested foreach
   } 
         
}//foreach ($new_field as $key => $value) ends
$sql=$sql.$sql_add; 
}//if($result_count>1) end
}//if($field_count>1) end
//************************ if($field_count>1) //Find multiple fields END *********************************************************
return $sql; 
}