2013-03-03 61 views
3

我最多有三個任意字段(稱爲「位置,犯罪和food_rating」)和兩個任意表名(稱爲「食物和犯罪」),可能包含這些給定的字段。不明確的查詢[codeigniter]

如果兩個表中都有屬性,我會收到一個「模棱兩可」的錯誤,這是可以理解的。但是,我不能完全想到如何執行一個查詢來檢查每個可能的情況,並在可能的情況下加入。

我在codeigniter中這樣做,到目前爲止已經寫了下面的,這會導致錯誤。我還應該注意,任意字段也可以是空的。

$this->db->select($data->att_one . ',' . $data->att_two . ',' . $data->att_three) 
->from($data->db_one . ',' . $data->db_two) 
->get() 
->result_array(); 

我收到的錯誤是:

Column 'location' in field list is ambiguous (因爲位置是兩個表中)

+0

通過向列名稱添加表名來解決歧義。 tablename.columnname – 2013-03-03 22:32:34

回答

3

問題模糊,目前還不清楚,你想從選擇什麼哪些表以及您希望如何填充結果。

如果你想從兩個「食品」,「位置」和一個結果「罪行」的表,你必須他們別名:

$this->db 
    ->select('food.location as foodlocation, crimes.location as crimeslocation') 
    ->from('food, crimes') 
    ->get() 
    ->result_array(); 

根據你與這些結果做什麼,它可能是更容易使用新的查詢爲每個表:

$results = array(); 
$select = array($data->att_one, $data->att_two, $data->att_three); 
$tables = array($data->db_one, $data->db_two); 

foreach ($tables as $tableName) 
{ 
    $results[$tableName] = $this->db->select($select) 
     ->get($tableName) 
     ->result_array(); 
} 

這真的取決於你在做什麼,但我希望你明白爲什麼數據庫無法理解你的查詢。

+0

是的,這聽起來像你手上有一團糟。當然,我不確定你在做什麼,但我強烈懷疑重新考慮你的整體方法可能是有用的。 – 2013-03-03 20:11:27