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 BY pdb_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 mysql where 不等于查询

CodeIgniter:如何使用 WHERE 子句和 OR 子句

带有Codeigniter中If条件的MySQL get_where

CodeIgniter - 绑定 EXIST 子查询

Codeigniter模型中的Mysql日期格式

CodeIgniter 活动记录在子查询中的位置