Codeigniter:MySQL Where子句和引号

时间:2009-04-07 18:29:12

标签: php mysql activerecord codeigniter

在CodeIgniter中查询

$this->db->select('comments.created_at, comments.section_id, comments.submittedby_id, users.username, comments.text, sections.name');
$this->db->order_by('comments.created_at', 'desc');
$this->db->where('comments.submittedby_id',  'users.user_id'); 
$this->db->where('comments.section_id', 'sections.id'); 

$query = $this->db->get(array('comments', 'users', 'sections'),10);

生成SQL请求

  

SELECT pdb_commentscreated_at,   pdb_commentssection_id,   pdb_commentssubmittedby_id,   pdb_usersusername,   pdb_commentstext,   pdb_sectionsname FROM   (pdb_commentspdb_users,   pdb_sections)在哪里   pdb_commentssubmittedby_id =   'users.user_id'AND   pdb_commentssection_id =   'sections.id'ORDER BY   pdb_commentscreated_at desc LIMIT   10

问题是数据库前缀(pdb_)未添加到WHERE子句中。我可以通过附加$this->db->dbprefix来手动插入前缀,但这并不能解决主要问题。

行情

`pdb_comments`.`submittedby_id` = 'pdb_users.user_id'

右侧的引号不准确,并为我生成0结果。有没有办法让CodeIgniter将where子句的后半部分识别为我的表的一部分;从而添加数据库前缀,并通过避免两个连接正确放置引号?还有另一种方法吗?提前谢谢。

-

乔恩

2 个答案:

答案 0 :(得分:3)

使用:

$this->db->select('comments.created_at, comments.section_id, comments.submittedby_id, users.username, comments.text, sections.name');
$this->db->from('comments');
$this->db->join('users', 'comments.submittedby_id=users.user_id'); 
$this->db->join('sections', 'comments.section_id=sections.id'); 
$this->db->order_by('comments.created_at', 'desc');
$query = $this->db->get();

代替。

答案 1 :(得分:1)

可能是一个愚蠢的问题,但为什么不直接编写SQL呢?界面看起来并没有给你带来任何混乱。