【问题标题】:Kohana Database query builder with JOIN & ON & ANDKohana 数据库查询构建器与 JOIN & ON & AND
【发布时间】:2012-05-18 21:24:52
【问题描述】:

我正在处理一个使用 COALESCE 为我当前项目检索本地化字符串的查询

当用作原始查询时,sql 可以工作,但我似乎无法使用查询构建器以这种方式构建连接

LEFT JOIN text as text_se
ON (main_table.text = text_se.id)
AND (text_se.lang_code = 'SV')

这段代码:

->join(array('text', 'text_se', 'LEFT')
    ->on('main_table.text', '=', 'text_se.id')
    ->on('text_se.lang_code', '=', 'SV')

只有结果

LEFT JOIN text as text_se
ON (main_table.text = text_se.id AND text_se.lang_code = 'SV')

这不一样... 有其他人在 JOIN 语句之后使用 AND 并且可以帮助我吗?

【问题讨论】:

  • 你能发布完整的原始查询吗?

标签: join kohana kohana-3.2


【解决方案1】:

或者你可以这样做......

->join(array('text', 'text_se'), 'LEFT')
    ->on('main_table.text', '=', DB::Expr('text_se.id AND text_se.lang_code = "SV"'))

【讨论】:

    【解决方案2】:

    为什么不使用 where:

    ->join(array('text', 'text_se', 'LEFT')
    ->on('main_table.text', '=', 'text_se.id')
    ->where('text_se.lang_code', '=', 'SV')
    

    【讨论】:

    • 这可能适用于这种情况,但 where 参数只会影响 where 子句。在某些情况下,需要在多个条件下连接表以进一步优化查询。
    • 在这种情况下,LEFT JOIN 的作用类似于 INNER JOIN
    【解决方案3】:

    这似乎在 3.1.x 中有效:

    ->join(array('text', 'text_se', 'LEFT')
    ->on('main_table.text', '=', DB::expr('text_se.id'))
    ->on('text_se.lang_code', '=', DB::expr('SV'))
    

    【讨论】:

      猜你喜欢
      • 2013-03-17
      • 2017-12-21
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      • 2014-10-09
      • 1970-01-01
      相关资源
      最近更新 更多