2015-06-29 40 views
1

我想獲得低於笨3查詢生成器自動報價錯誤

SELECT * FROM `ci_nest` WHERE `lft` > 9 AND `rgt` < 28 AND `rgt` = `lft` + 1 ORDER BY `lft` 

但是笨3是在錯誤的地方插入引號的SQL格式。

我的代碼如下

$this->db->where($leftcol . ' > ' . $leftval . ' AND ' . $rightcol . ' < ' . $rightval); 
$this->db->where($rightcol . " = " . $leftcol . " +1"); 
$this->db->order_by($leftcol); 
$query = $this->db->get($this->table_name); 

什麼笨查詢輸出

SELECT * 
FROM `ci_nest` 
WHERE `lft` > 9 AND `rgt` < 28 
AND `rgt` = `lft` `+1` 
ORDER BY `lft` 

正如你可以在該行看到和rgt = lft + 1是否正由笨3查詢生成器錯誤地格式化。

任何解決此問題的解決方法,將不勝感激。

+0

'$這個 - > DB->其中($ rightcol 「=」 $ leftcol '+1');' –

+0

嘿尼西,如果你有一個解決方案請張貼它作爲回答,而不是評論 –

回答

1

禁用可選第3個參數的反引號,並由您自己創建。

$this->db->where($rightcol, '`'.$leftcol.'`+1', FALSE); 

或者用雙引號,似乎更好。

$this->db->where($rightcol, "`$leftcol`+1", FALSE); 
+0

謝謝,我忘記了可選的第三個參數 –

0

現在我發現的一個快速解決方法是使用Codeigniter 3查詢方法而不是查詢生成器。

$query = $this->db->query("SELECT * FROM `{$this->table_name}` WHERE 
`{$leftcol}` > {$leftval} AND `{$rightcol}` < {$rightval} AND 
`{$rightcol}` = `{$leftcol}` + 1 ORDER BY `{$leftcol}`"); 
0

試試這個:

$this->db->where($leftcol . ' > ' . $leftval . ' AND ' . $rightcol . ' < ' . $rightval); 
$this->db->where($rightcol . " = " . $leftcol + 1); 
$this->db->order_by($leftcol); 
$query = $this->db->get($this->table_name); 
+0

查詢生成器輸出爲 SELECT * FROM'ci_nest' WHERE'lft'> 22 AND'rgt' <27 AND 1 IS NULL ORDER BY 'lft'。正在構建的查詢是錯誤的,但感謝您的嘗試 –