1

たとえば、モデルで1つのクエリを実行すると、次のようになります。

public function list_users() { 
       $q = "SELECT user_id, username FROM users";
       return $q->result_array();
}

そして今、そのユーザーからの投稿を一覧表示するには、この関数内でそのIDを参照する必要があります。

   public function list_posts() { 
           $q = "SELECT post_id, post_title, post_content FROM posts 
                 WHERE user_id = what??";
           return $q->result_array();
   }

OK、これらの関数は両方ともモデルにあります。ここで、list_posts()のlist_users()からRESULTを使用する方法。IDのARRAYを渡す必要があり、それをlist_users()からの特定のIDにのみ使用するには、ARRAYも返されることに注意してください。

結合クエリを使用できることはわかっていますが、分割する必要のあるクエリがたくさんあるため、それはまったく重要ではありません。

4

1 に答える 1

5

なぜJOINステートメントを使用して、2つのクエリを1つにするのですか?

これにより、データベースの負荷が減り、クエリ時間が短縮され、モデルの乱雑さが軽減されます。

SELECT p.post_id, p.post_title, p.post_content, u.user_id, u.username FROM posts p LEFT JOIN users u ON u.user_id = p.user_id

アクティブなレコードを使用してこれを行うこともできます。これにより、本格的なクエリや、SQLに対するCI手法の多くを使用する必要がなくなります。

http://codeigniter.com/user_guide/database/active_record.html

$this->db->select('p.post_id, p.post_title, p.post_content, u.user_id, u.username');
$this->db->from('posts p');
$this->db->join('users u', 'u.user_id = p.user_id');
$q = $this->db->get();

$q->result();

編集: 値をオブジェクトとして返すことができます。IE:$this->user_id次に、posts関数で値を参照します。理想的には、コントローラーで最初の関数を呼び出してから、次の関数でreturn $user_idそれを参照する必要があります。ただし、これは絶対に最善のケースではありませんが、データベースへの負担が少ないため、JOINを使用する必要があります。

//controller

function test(){
  $users = $this->exampleModel->list_users();
  //manipulate user data if needed
  $posts = $this->exampleModel->list_posts($users);
}
于 2012-04-17T15:04:22.253 に答える