2012-03-29 75 views
0

我有这样的代码:PHP,通过关键字搜索的MySQL从多个表

function search_keyword(){ 
     $keyword = trim($_POST['keyword']); 
     $search_explode = explode(" ", $keyword); 
     $x = 0; 

     $sql = " (SELECT name AS type FROM global_info WHERE "; 
     foreach($search_explode as $each){ 
      $x++; 
      if($x == 1){ 
       $sql .= " name LIKE '%$each%'";}       
      else { 

       $sql .= " name LIKE '%$each%' "; 
      } 
     } 

      $sql .= ") UNION ALL "; 

      $sql .= " (SELECT name AS type FROM person WHERE "; 
     foreach($search_explode as $each){ 
      $x++; 
      if($x == 1){ 
       $sql .= " name LIKE '%$each%'";}       
      else { 

       $sql .= " name LIKE '%$each%' "; 
      } 
     } 

      $sql .= ") UNION ALL "; 

      $sql .= "(SELECT name AS type FROM event WHERE "; 
     foreach($search_explode as $each){ 
      $x++; 
      if($x == 1){ 
       $sql .= " name LIKE '%$each%'";}       
      else { 

       $sql .= " name LIKE '%$each%' "; 
      } 
     } 

     $sql .= ") "; 

     $q = $this->db->query($sql); 
     return $q = $q->num_rows() == 0 ? FALSE : $q->result(); 
    } 

的功能正在工作。我不知道的是如何知道哪些数据来自哪个表格,然后在页面上显示结果?

回答

1

也许,向每个SELECT的结果添加一个字段。

function search_keyword(){ 
     $keyword = trim($_POST['keyword']); 
     $search_explode = explode(" ", $keyword); 
     $x = 0; 

     $sql = " (SELECT name AS type, \"table_global_info\" as mytable FROM global_info WHERE "; 
     foreach($search_explode as $each){ 
      $x++; 
      if($x == 1){ 
       $sql .= " name LIKE '%$each%'";}       
      else { 

       $sql .= " name LIKE '%$each%' "; 
      } 
     } 

      $sql .= ") UNION ALL "; 

      $sql .= " (SELECT name AS type, \"person\" as mytable FROM person WHERE "; 
     foreach($search_explode as $each){ 
      $x++; 
      if($x == 1){ 
       $sql .= " name LIKE '%$each%'";}       
      else { 

       $sql .= " name LIKE '%$each%' "; 
      } 
     } 

      $sql .= ") UNION ALL "; 

      $sql .= "(SELECT name AS type, \"event\" as mytable FROM event WHERE "; 
     foreach($search_explode as $each){ 
      $x++; 
      if($x == 1){ 
       $sql .= " name LIKE '%$each%'";}       
      else { 

       $sql .= " name LIKE '%$each%' "; 
      } 
     } 

     $sql .= ") "; 

     $q = $this->db->query($sql); 
     return $q = $q->num_rows() == 0 ? FALSE : $q->result(); 
    } 

问候!

+0

它正在工作。感谢您的帮助 :) – Sasha 2012-03-29 10:50:57

0

在SELECT语句中插入重新列标识表: SELECT名称类型, 'tab_x' 作为from_table FROM global_info WHERE .... SELECT名称类型, 'tab_x1' 作为from_table FROM global_info WHERE

当您使用返回的值时,请检查“from_table”字段以查看原始表格的结果来自