0

私は codeigniter に取り組んでおり、次のクエリを書いています。

$this->db->select('*');
$this->db->from('tbl_profile');
$this->db->join('tbl_msg', 'tbl_msg.msg_sender_id = tbl_profile.profile_id');
$this->db->order_by("msg_id", "desc");
$query = $this->db->get('', $config['per_page'], $this->uri->segment(3));
$data['records'] = $query->result_array();

それに応じて、次の結果が得られます。

SELECT (*) FROM tbl_profile
JOIN tbl_msg ON tbl_msg.msg_sender_id = tbl_profile.profile_id

次のクエリに対応する結果が必要なため、間違った結果を返しています。

select * from tbl_profile as A
join (select * from tbl_msg) as B on A.profile_id = B.msg_sender_id

助けてください

4

1 に答える 1

0

まず、order by 句がありませんが、他の違いを意味していると思います。

それが必要な場合は、次のクエリを使用できます。正確なコードが返されます。

$this->db->select('*', FALSE);
$this->db->from('tbl_profile as A');
$this->db->join('( select * from tbl_msg ) as B', 'A.msg_sender_id = B.profile_id');
$this->db->order_by("msg_id", "desc");
$query = $this->db->get('', $config['per_page'], $this->uri->segment(3));
$data['records'] = $query->result_array();

codeigniter ユーザーマニュアルから:

$this->db->select()

オプションの 2 番目のパラメーターを受け入れます。FALSE に設定すると、CodeIgniter はフィールドまたはテーブル名をバッククォートで保護しようとしません。これは、複合 select ステートメントが必要な場合に便利です。

于 2012-08-18T15:29:18.793 に答える