【发布时间】:2013-01-19 17:08:23
【问题描述】:
最近,我再次注意到 CodeIgniter 的 ActiveRecord 库中有一个令人难以置信的逻辑错误。
当我尝试在连接中使用“AND”时出现问题。
示例查询:
$this -> db -> join(
'predict',
"predict.id_predict = portion.id_predict AND event.id_event = 5",
'left'
);
结果:
LEFT JOIN `predict` ON
`predict`.`id_predict` = `portion`.`id_predict`
AND event.id_event = 5
但应该更有可能:
LEFT JOIN `predict` ON (
`predict`.`id_predict` = `portion`.`id_predict`
AND `event`.`id_event` = 5
)
有什么办法可以防止这个错误吗?
【问题讨论】:
-
@RaphaëlAlthaus ellislab.com/forums/viewthread/152221 在检查后仍然视力不佳?
-
问题是第二个子句中缺少反引号,还是缺少括号?我想知道我的视力是否也在增加,因为我想这两种形式都会返回相同的结果。
-
实际问题是什么?返回了损坏/错误的数据?一个错误?反引号不应该对查询产生影响,但允许您使用非标准标识符名称。即使
event.id_event没有反引号,它也不应该影响结果。有效的 SQL 语句也不需要额外的括号,尽管它可能有助于将您的意图传达给阅读该语句的其他人。 -
IMO
join应该只包含主要的join条件。其余条件可以放在where子句上。
标签: mysql codeigniter activerecord join left-join