2011-07-07 10 views
1

Kohanaクエリビルダを使用すると、クエリを1つずつ作成することは可能ですか?Kohana DBを使用している場合、ページネーションのカウントが必要なときに重複コードを避けるにはどうすればよいですか?

次に、このクエリでカウントを実行します。

次に、クエリ自体を実行します。すべての重複した条件文...、カウント用と結果のための1つを記述することなく

...

だけ戻って一つのレコードを得ることにメインクエリの結果に

DB::select(array('COUNT("pid")', 'mycount')) 

を追加します。

は、私は考えることができる唯一の方法は、検索およびSQLに置き換えている今...、カウントを実行し、何とか選択から

array('COUNT("pid")', 'mycount') 

を削除することが多分可能

ですコードそのものを実行してから、コードのSQLを実行するだけですが...もっと良い方法が必要です...

ありがとう!

答えて

2

。最初のページは1ページ目の結果を返し、2ページ目は結果を返します。第3に、プライベートメソッドは、#1と#2で使用される共通条件を保持します。クエリでJOINやWHEREなどを使用する必要がある場合は、すべて#3に進みます。この方法では、クエリを繰り返す必要はありません。

/* 1 */ 
public function get_stuff($pagination = false){ 
    $query = DB::select(/* ... columns here ... */); 
    $query = $this->get_stuff_query($query); 
    if($pagination) $query->limit($pagination->items_per_page)->offset($pagination->offset); 
    return $query->execute(); 
} 

/* 2 */ 
public function get_stuff_count(){ 
    $query = DB::select(array('COUNT("id")', 'total_rows')); 
    $query = $this->get_stuff_query($query); 
    $result = $query->execute(); 
    return $result->get('total_rows',0); 
} 

/* 3 */ 
private function get_stuff_query($query){ 
    $query->from(/* tablename */); 
    $query->join(/* ... */); 
    $query->where(/* ... */); 
    return $query; 
} 
2

ちょうど私は3つの方法を使用することを行うために使用count_last_query()

// $db is a Database instance object 
$count = $db->count_last_query(); 
+0

私がこれを使用できなかった理由は、最初にカウントを取得してからクエリを実行したかったからです。 – Serhiy

関連する問題