1

MySQL テーブルと HTML 検索フォームがあります。そのため、ユーザーの要求に応じて、その HTML フォームを使用してデータベースを検索できます。

私は CodeIgniter を使用しています。これは、データベースのクエリに使用しているモデル関数です

public function fetch_categories($limit, $start){

    $user_info = $this->session->userdata('search_info');

    $iam            =   $user_info['iam'];
    $searching_for  =   $user_info['searching_for'];
    $age_from       =   $user_info['age_from'];
    $age_to         =   $user_info['age_to'];
    $country        =   $user_info['country'];
    $Province       =   $user_info['Province'];

    $this->db->where('sex !=', $iam);
    $this->db->where('sex', $searching_for);
    $this->db->where('Age >=' , $age_from);
    $this->db->where('Age <=' , $age_to);
    if($Province != 1){
        $this->db->where('Province' , $Province);
    }

    $this->db->limit($limit, $start);
    $query = $this->db->get("members");
    return $query->result_array();
            }

これは適切に機能していますが、結果にページネーションを追加する必要があるため、ここでも CodeIgniter の組み込みのページネーション ライブラリを使用します。

fetch_categories() 関数が実行される前に結果をカウントしたいので、search_count()関数をこのように使用します。

public function search(){
     $user_info = $this->session->userdata('search_info');

        $iam            =   $user_info['iam'];
        $searching_for  =   $user_info['searching_for'];
        $age_from       =   $user_info['age_from'];
        $age_to         =   $user_info['age_to'];
        $country        =   $user_info['country'];
        $Province       =   $user_info['Province'];

        $this->db->where('sex !=', $iam);
        $this->db->where('sex', $searching_for);
        $this->db->where('Age >=' , $age_from);
        $this->db->where('Age <=' , $age_to);

        if($Province != 1){
            $this->db->where('Province' , $Province);
        }
            $query = $this->db->count_all('members');
            return $query;       
    }

しかし、これは常に結果として行数全体を返します。そのため、ページに不要なページ番号があります。これが原因で起こっていることを私は知っています。

$query = $this->db->count_all('members');

しかし、このタイプの関数を使用して関連するものだけを数える方法がわかりません。

4

2 に答える 2

1

こんにちは、アクティブなレコード数で where 句を使用する場合は、このメソッド count_all_results() を使用します

 $this->db->where('sex !=', $iam);
 $this->db->where('sex', $searching_for);
 $this->db->where('Age >=' , $age_from);
    $this->db->where('Age <=' , $age_to);

    if($Province != 1){
        $this->db->where('Province' , $Province);
    }
$this->db->count_all_results()
于 2013-06-15T07:19:57.183 に答える
0

この方法を試してください:

 $this->db->where('sex !=', $iam);
 $this->db->where('sex', $searching_for);
 $this->db->where('Age >=' , $age_from);
 $this->db->where('Age <=' , $age_to);

 if($Province != 1)
 {
    $this->db->where('Province' , $Province);
 }
 $this->db->from('members');
 $query = $this->db->get();
 if($query)
 {
    return $query->num_rows();
 }
 else
 {
    return FALSE;
 }
于 2013-06-15T08:17:33.930 に答える