在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_comments
。created_at
,pdb_comments
。section_id
,pdb_comments
。submittedby_id
,pdb_users
。username
,pdb_comments
。text
,pdb_sections
。name
FROM (pdb_comments
,pdb_users
,pdb_sections
)在哪里pdb_comments
。submittedby_id
= 'users.user_id'ANDpdb_comments
。section_id
= 'sections.id'ORDER BYpdb_comments
。created_at
desc LIMIT 10
问题是数据库前缀(pdb_
)未添加到WHERE
子句中。我可以通过附加$this->db->dbprefix
来手动插入前缀,但这并不能解决主要问题。
行情:
`pdb_comments`.`submittedby_id` = 'pdb_users.user_id'
右侧的引号不准确,并为我生成0结果。有没有办法让CodeIgniter将where子句的后半部分识别为我的表的一部分;从而添加数据库前缀,并通过避免两个连接正确放置引号?还有另一种方法吗?提前谢谢。
-
乔恩
答案 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呢?界面看起来并没有给你带来任何混乱。