2

left join include select を codeigniter sql メソッドに変換するには? ありがとう。ただ知りたいだけです。

SELECT c1.c1_id, c1.c1_name, c2.c2_id, c2.c2_name, c2.c2_type, c2.c2_status, f.f_id, f.f_name, f2.f2_id, f2.f2_name FROM category2 c2 
LEFT JOIN category1 c1 ON c1.c1_id = c2.c1_id 
LEFT JOIN (
    SELECT DISTINCT c2_id, f_id, f_name FROM file ORDER BY f_id DESC
) f ON f.c2_id = c2.c2_id
LEFT JOIN (
    SELECT DISTINCT c2_id, f2_id, f2_name FROM file2 ORDER BY f2_id DESC
) f2 ON f2.c2_id = c2.c2_id
WHERE c2.c2_status = 1
GROUP BY c2.c2_id
4

2 に答える 2

2

codeigniterのサブクエリ方式を使用してこれを行うことができます。この目的のために、codeigniterをハックする必要があります。このようにsystem/database/DB_active_rec.phpに移動しますこれらの関数からpublicまたはprotectedキーワードを削除します

public function _compile_select($select_override = FALSE)
public function _reset_select()

これでサブクエリの書き込みが可能になりましたそして今ここにアクティブレコードのあるクエリがあります

$select =   array('DISTINCT c2_id','f_id','f_name');
$this->db->select($select);
$this->db->from('file');
$this->db->order_by('f_id','DESC');
$subQuery1 = $this->db->_compile_select();

unset($select);

$this->db->_reset_select();

$select =   array('DISTINCT c2_id','f_id','f2_name');
$this->db->select($select);
$this->db->from('file2');
$this->db->order_by('f2_id','DESC');
$subQuery2 = $this->db->_compile_select();

unset($select); 

$this->db->_reset_select();

// And now your main query

$select =   array(
                  'c1.c1_id',
                  'c1.c1_name',
                  'c2.c2_id',
                  'c2.c2_name',
                  'c2.c2_type',
                  'c2.c2_status',
                  'f.f_id',
                  'f.f_name',
                  'f2.f2_id',
                  'f2.f2_name'
            );

$this->db->select($select);
$this->db->from('category2 c2');
$this->db->join("($subQuery1)",'f.c2_id = c2.c2_id','left');
$this->db->join("($subQuery2)",'f2.c2_id = c2.c2_id','left');
$this->db->where('c2.c2_status',1);
$this->db->group_by('c2.c2_id');
$main_query = $this->db->get();

そして、物事は行われます。乾杯!!!注:サブクエリを使用する場合は、次を使用する必要があります

$this->db->from('myTable')

それ以外の

$this->db->get('myTable')

クエリを実行します。

これで、次のように作成されたクエリを確認できます。

echo $this->db->last_query();
于 2013-03-14T06:38:52.797 に答える
0
$query='SELECT c1.c1_id, c1.c1_name, c2.c2_id, c2.c2_name, c2.c2_type, c2.c2_status, f.f_id, f.f_name, f2.f2_id, f2.f2_name FROM category2 c2 
LEFT JOIN category1 c1 ON c1.c1_id = c2.c1_id 
LEFT JOIN (
    SELECT DISTINCT c2_id, f_id, f_name FROM file ORDER BY f_id DESC
) f ON f.c2_id = c2.c2_id
LEFT JOIN (
    SELECT DISTINCT c2_id, f2_id, f2_name FROM file2 ORDER BY f2_id DESC
) f2 ON f2.c2_id = c2.c2_id
WHERE c2.c2_status = ?
GROUP BY c2.c2_id';
$params=array();
$params[]=1;
$result=$this->db->query($query,$params);
$result=$result->result_array();
print_r($result); 

コードを難読化することが目的でない限り、CodeigniterのActiveRecordクラスの使用は避けます。

「あなたのコードを維持することになった人が、あなたがどこに住んでいるかを知っている暴力的な精神病質者であるかのように、常にコードを書いてください。」

于 2013-03-14T04:16:42.453 に答える