2012-03-29 2 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

0

В заявлении выберите вставки заново столбец, который идентифицирует таблицу: ВЫБЕРИТЕ имя AS типа, 'tab_x', как from_table ОТ global_info ГДЕ .... ВЫБРАТЬ имя AS типа, 'tab_x1' как from_table ИЗ global_info ГДЕ

, когда вы используете возвращаемые значения, проверьте поле «from_table», чтобы увидеть исходную таблицу, результат получен от

Смежные вопросы