2016-10-10 25 views
0

你好,我正在尝试为我的网站创建一个搜索功能。我有这个方法具有查询如何处理从联合选择语句收到的数据

public function search_all($data) 
{ 
    $query = []; 

    $result = $this->db->query(' 
     SELECT blog_title FROM blog WHERE blog_title LIKE "%'. $data . '%" 
     UNION 
     SELECT body FROM blog WHERE body LIKE "%'. $data . '%" 
     UNION 
     SELECT username FROM users WHERE username LIKE "%'. $data . '%" 
    '); 

    while ($row = $result->fetch_assoc()) 
    { 
     $query[] = $row; 
    } 

    $result->free(); 

    return $query; 

    $mysqli->close(); 
} 

然后,我有处理用户输入

public function search() 
{ 
    if (isset($_POST['search'])) 
    { 
     $search_term = trim($_POST['search_term']); 

     $terms = $this->search->search_all($search_term); 

     foreach ($terms as $term) 
     { 
      var_dump($term); 
     } 
    } 
} 

搜索工作排序的方法。如果我搜索一个用户名或一个博客标题它,然后我可以重复回来这样

echo $term['blog_title']; 

,如果我的var_dump然后我得到的东西像

array (size=1) 
    'blog_title' => string 'BillyBob' (length=8) 

我的问题是,为什么它总是retrun BLOG_TITLE为钥匙。我想我会做一些像

如果我想呼应博客标题

echo $term['blog_title']; 

如果我想呼应的用户名

echo $term['username']; 

回答

3

在两个表的结合无论是两个表的字段应该相同,或者两个表的别名应该相同。

请试试这个查询。

$result = $this->db->query(' 
    SELECT body,blog_title,'' as username FROM blog WHERE blog_title LIKE "%'. $data . '%" OR body LIKE "%'. $data . '%" OR username LIKE "%'. $data . '%" 
    UNION 
    SELECT '' as body,'' as blog_title,username FROM users WHERE username LIKE "%'. $data . '%" 
'); 

该查询将在搜索将与blog_title或body或username匹配时选择记录。你将能够获取所有三个字段的取值记录值。

+0

用户名是从一个不同的表中retreived调用users – badsyntax

+0

好吧,博客和用户表之间是否有任何关系? –

+0

没关系。我希望用户能够搜索并找到用户或博客帖子。当我遇到这个问题时,我正在玩添加更多的工会,以便他们可以找到其他的东西。 – badsyntax