PHP, MySQL поиск по ключевым словам из нескольких таблиц - PullRequest
0 голосов
/ 29 марта 2012

У меня есть такой код:

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();
    }

Функция работает.Чего я не знаю, так это как узнать, какие данные из какой таблицы, а затем показать результаты на странице?

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Возможно, добавление поля к результатам каждого 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 голосов
/ 29 марта 2012

В операторе select вставьте новый столбец, который идентифицирует таблицу: SELECT name AS type, 'tab_x' как from_table FROM global_info WHERE .... SELECT name AS type, 'tab_x1' as_table из FROM global_info WHERE

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...