Codeigniter:MySQL Where 子句和引号
Posted
技术标签:
【中文标题】Codeigniter:MySQL Where 子句和引号【英文标题】:Codeigniter: MySQL Where Clause and Quotes 【发布时间】:2010-10-18 03:23:40 【问题描述】: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 请求:
选择
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' 和pdb_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 子句的后半部分识别为我的表的一部分;从而添加数据库前缀,并通过避免两个连接正确放置引号?还有另一种方法可以做到这一点吗?提前致谢。
--
乔恩
【问题讨论】:
【参考方案1】:用途:
$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();
改为。
【讨论】:
我试图避免连接以减少开销。不可能?还是不需要? 你试图完成的仍然是一个连接;不是显式连接(不使用“join”关键字),但仍然是连接。您应该使用显式连接,以使您的代码更具可读性。另外,在您最喜欢的客户端中使用 EXPLAIN sql_statement 来查看查询是如何构造的。【参考方案2】:可能是一个愚蠢的问题,但你为什么不直接写 SQL 呢?界面看起来除了杂乱之外什么都没有。
【讨论】:
很高兴使用 CI 调用来代替 - 让我在使用 DB 前缀等方面具有灵活性。以上是关于Codeigniter:MySQL Where 子句和引号的主要内容,如果未能解决你的问题,请参考以下文章
CodeIgniter:如何使用 WHERE 子句和 OR 子句