2016-10-10 26 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