2016-10-10 6 views
0

こんにちは私のウェブサイトの検索機能を作成しようとしています。私はその後、私は、ユーザー入力を処理するメソッドユニオン選択ステートメントから受信したデータを処理する方法

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

検索は、ソートの作品を持っているクエリ

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

を持ってこの方法を持っています。私は、ユーザー名やブログのタイトルを検索する場合、私は、その後のvar_dump私は私の質問は、なぜそれがいつものようにblog_title retrunんさ

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

ような何かを得れば、それは、私はこの

echo $term['blog_title']; 

のようにそれをエコーバックすることができますキー。私は、ユーザー名に二つのテーブルのいずれかの連合で

echo $term['username']; 

答えて

3

をエコーし​​たい場合は、私は、私はブログのタイトル

echo $term['blog_title']; 

をエコーし​​たい場合

ような何かをしなければならないだろうと思いました両方のテーブルのフィールドが同じであるか、または両方のテーブルでエイリアスが同じである必要があります。

このクエリを試してください。

$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または本文またはユーザー名と一致する場合にレコードを選択します。また、3つのフィールドのすべての値をフェッチしてレコードを取得できます。

+0

ユーザ名は、ユーザ – badsyntax

+0

と呼ばれる別のテーブルから取得され、ブログテーブルとユーザテーブルの間に関係はありますか? –

+0

関係はありません。ユーザーがユーザーやブログの投稿を検索して見つけることができるようにしたい。私はこの問題に遭遇したときに他のものを見つけることができるように、より多くの組合を追加して遊んでいました。 – badsyntax

関連する問題