2017-01-25 9 views
1

検索機能.. CodeIgniterの私はこの権利を得ることができない

ビューファイル(view_searchlog.php)で

ユーザー:、私はテーブルを持って

<div class="form-group"> 
     <form class="form-inline" action="<?php echo base_url(); ?>index.php/search/accsearch" method="post"> 
     <select class="form-control" name="field"> 
      <option selected="selected" disabled="disabled" value="">Filter By</option> 
      <option value="subjName">Subject</option> 
      <option value="homeaddress">Location</option> 
      <option value="lname">Last Name</option> 
     </select> 
     <input class="form-control" type="text" name="search" value="" placeholder="Find.."> 
     <input class="btn btn-default" type="submit" name="filter" value="Search"> 
    </form> 
     </div> 
    </div> 
     </div> 
<div class="col-xs-12 col-sm-6"> 
    <h2 class="sub-header">Search Results</h2> 
    </div> 

    <div class="row"> 
    <div class="col-sm-12 col-md-8"><hr/> 
     <?php echo $this->session->flashdata('nores'); ?> 
       <?php foreach ($users as $user): ?> 
    <div class="thumbnail"> 
     <img src="..." alt="..."> 
     <div class="caption"> 
     <h3><?=$user->name;?></h3> 
     <p><?=$user->homeaddress;?></p> 
     <p><?=$user->mobileNum;?></p> 
     <p><a href="#" class="btn btn-primary" role="button">Request</a> <a href="#" class="btn btn-default" role="button">View Profile</a></p> 
     </div> 
    </div> 
       <?php endforeach; ?> 
    </div> 
</div> 

デシベル,アカウントおよび

人の

被験者

subjID | subjName | accID 
------ | -------- | ----- 
1  | Math  | 1 

アカウント

accID | subjID | userID 
------ | -------- | ----- 
1  | 1  | 1 

ユーザー

userID | userName | accID 
------ | -------- | ----- 
1  | foo  | 1 

は、私は私の検索コントローラ用のFFコードを持っている

if (isset($filter) && !empty($search)) { 
      $data['users'] = $this->model_search->searchTutor($field, $search); 
     } 
     elseif (($filter == 'subjName') && !empty($search)) { 
      $data['users'] = $this->model_search->searchBySubj($field, $search); 
     } 
     elseif (isset($filter) && empty($search)) { 
      $data['users'] = $this->model_search->getlist($field); 
     } 
     elseif (isset($filter) && ($search == 0)) { 
      $this->session->set_flashdata('nores','<div class="alert text-center">No result matched your search.</div>'); 
      redirect('search/index'); 
     } 

その後、私はデシベル

でだから、検索モデルでは第二のelseif ->searchBySubj();機能

を入力するようになっていないサブジェクト名を検索しよう:

public function searchTutor($field, $search) 
    { 
     $this->db->like($field, $search); 
     $this->db->order_by($field); 
     $query = $this->db->get('users'); 
     return $query->result(); 
    } 

    public function searchBySubj($field, $search) 
    { 
     $this->db->query("SELECT id as Userid, accID as AccID, subjID as subid, subjName as sname FROM users userT INNER JOIN account accT ON id = accID INNER JOIN subjects ON accID = subjID;"); 
     $query = $this->db->get('users', 'ASC'); 
     return $query->result(); 
    } 

これが表示されます:

A Database Error Occurred 
Error Number: 1054 
Unknown column 'subjName' in 'where clause' 
SELECT * FROM `users` WHERE `subjName` LIKE '%mathematics%' ESCAPE '!' ORDER BY `subjName` 

私は場所を検索しようと、それは私がDBにない場所を検索しようとした後

すべてのリストが表示されますが、最後の条件はflashdataを表示しないときに実行されるのelseif第三

私は<?php echo $this->session->flashdata('nores'); ?>を上記のビュー(上記)に入れます

全体として、私は自分が持っているテーブルでSubject Nameで検索したいだけです。また、一致するレコードがない場合は、フラッシュデータを表示します。

これらはどのように正しく行われるべきですか?これらのエラーの原因は何ですか?

私には何が欠けていますか?

私の悪いコーディングはここで、この1つで私を助けてください。クエリで

答えて

0

は、あなたがSubjectテーブルにある列subjNameを探しています:

SELECT * FROM `users` WHERE `subjName` LIKE '%mathematics%' ESCAPE '!' ORDER BY `subjName` 

あなたはsubjName列にアクセスするために対象のテーブルに参加する必要があります:

SELECT * FROM `users` INNER JOIN account accT ON id = accID INNER JOIN subjects ON accID = subjID WHERE `subjName` LIKE '%mathematics%' ESCAPE '!' ORDER BY `subjName` 

(これは、追加された条件付きのコードからの結合クエリです。それは動作しているかどうかは分かりません)

+0

で動作していない...おかげppatil27 @ – Distro

1

以下のコードをpoそれをユーザテーブルに限定します。アクティブなレコードに対してのみ使用できます。以下は

$query = $this->db->get('users', 'ASC'); 

正しいアプローチではありません。.. ..しようとしました

$query = $this->db->query("YOUR QUERY"); 
return $query->result(); 
+0

は、私にはそのためのおかげで新しい知識を追加しました。しかし、私が理解できないのは、なぜこの行を読んでいないのかです。 'elseif(($ filter ==' subjName ')&&!empty($ search)){ $ data [' users '] = $ this-> model_search-> searchBySubj($ field、$ search); } 'すでにクエリを変更してサブジェクトテーブルに直接アクセスしようとしましたが、エラーはまだ 'where句'の '不明な列' subjName 'です。 SELECT * FROM ** users ** where subjName LIKE'%mathematics% 'ESCAPE '!' ORDER BY subjName' – Distro

+0

上記の条件が満たされない場合にのみ来ます。だから、最初の条件でも$ filter == 'someName'を与えてみてください。 –

+0

上記の解決策を試しましたか? –

関連する問題