2013-02-19 97 views
1

你好我使用笨加入爲什麼我不能使用笨括號連接查詢

$this->db->join 

我用

$this->db->join ($table2 . " as c","(c.3rdPartyID=a.ShopID OR c.3rdPartyID=a.ParentID OR c.ShopID=a.ShopID OR c.ShopID=a.ParentID) AND c.3rdPartyID !=0 ", 'left'); 

,我也試圖與

$join_query = "(c.3rdPartyID=a.ShopID OR c.3rdPartyID=a.ParentID OR c.ShopID=a.ShopID OR c.ShopID=a.ParentID) AND c.3rdPartyID !=0 "; 

$this->db->join ($table2 . " as c",$join_query, 'left'); 

它給一個錯誤 。

但出括號它工作得很好,像這樣

$this->db->join ($table2 . " as c"," c.3rdPartyID=a.ShopID OR c.3rdPartyID=a.ParentID OR c.ShopID=a.ShopID OR c.ShopID=a.ParentID AND c.3rdPartyID !=0 ", 'left'); 

但對我來說,我需要括號,我應該去正規的MySQL查詢,是這樣做的codeignier不能,請幫助.. 。

這是錯誤

enter image description here

回答

0

無論是

1)將您的 「AND c.3rdPartyID!= 0」 到一個單獨的 - >,其中()

2)寫你的查詢&使用:

$sql = "Select..."; 
$this->db->query($sql); 
+0

,如果你認爲它應該工作,請使用輸出$完整的SQL語句這個 - > DB-> last_query(),並張貼在這裏給我們看 – jmadsen 2013-02-19 03:22:00

0

複製來自ellislab論壇:

該查詢將不可能使用活動記錄連接() 功能。有一行正則表達式查找連接條件的某個結構(通常爲table.something = table.somethingelse)。在重新創建您提供的連接語句的第一部分時,它將忽略除字母數字和句點(。)以外的任何字符 。其中部分原因是Active Record使用稱爲_protect_identifiers的私有函數, 在需要的情況下向列名稱 (hostname.database.table.column)添加任何必需的信息(請參閱 文件'DB_driver .php'在數據庫系統文件夾內,以獲得更好的 描述)。在table.column 之前添加其他字符會導致這些字符位於列名稱 結構的中間,如果主機或數據庫名稱需要添加到 它。

所以基本上,你不能使用join()函數。你可以用 使用query()函數並自己寫出來,或者擴展 Active Record類並重寫join()函數以滿足你的需求。

4

使用false。例如:

$this->db->join ($table2 . " as c","(c.3rdPartyID=a.ShopID OR c.3rdPartyID=a.ParentID OR c.ShopID=a.ShopID OR c.ShopID=a.ParentID) AND c.3rdPartyID !=0 ", 'left', false); 
+0

人們應該認爲,一旦給予好評之前三思在downvote之前:) – jit 2016-09-28 06:36:05

相關問題