2012-05-10 40 views
2

我正在使用COALESCE檢索本地化字符串爲我的當前項目Kohana的數據庫查詢構建器與JOIN和ON&AND

爲原始查詢中使用時,但我似乎無法獲得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可以幫助我嗎?

+0

您可以發佈完整的原始查詢? – badsyntax

回答

1

爲什麼不使用其中:

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

這可能適用於這種情況,但where參數隻影響where子句。在某些情況下,希望在多個條件下連接表以進一步優化查詢。 –

+0

在這種情況下,LEFT JOIN將像INNER JOIN一樣行事 – Kalim

5

或者你可以做到這一點....

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

這似乎在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'))