2013-10-24 18 views
0

這是我嘗試做的事。我有以下結構的表,是應該持有任何其他表

Translations 
| Language id | translation | record_id | column_name | table_name | 
==================================================================== 
| 1   | Hello  | 1   | test_column | test_table | 
| 2   | Aloha  | 1   | test_column | test_table | 
| 1   | Test input | 2   | test_column | test_table | 

在我的代碼我在我的觀點使用其它數據的轉換價值,我有查這個表的功能,並以用戶的語言返回字符串。如果字符串沒有用他的語言翻譯,函數返回應用程序的默認字符串(假設用ID = 1

它工作正常,但我必須通過約600個視圖文件來應用此.. 。我想知道是否可以在原始記錄的$this->db->get()之前的CodeIgniter模型中注入一些SQL,以替換原始列和轉換後的列。

事情是這樣的:

$this->db->select('column_name, col_2, col_3'); 
// Injected SQL pseudocode: 
// If RECORD EXISTS in table Translations where Language_id = 2 and record_id = 2 AND column_name = test_column AND table_name = test_table 
// BEGIN 
//  SELECT translations.translation as column_name 
//  WHERE translations.table_name = test_table AND column_name = test_column AND record_id = 2 
// END 
// ELSE 
// BEGIN 
//  SELECT translations.translation as column_name 
//  WHERE translations.table_name = test_table AND column_name = test_column AND record_id = 1 
// END 

$this->db->get('test_table'); 

這是可能以某種方式做?

+0

也許我不理解你的問題好吧,但你不能只是以某種方式將翻譯表加入到查詢中? – jmadsen

+0

我也需要它是有條件的。 「如果存在行,請選擇其他行,否則請保留原始列」 – Loupax

回答

0

你要求的東西沒有意義。您只需首先進行不同的查詢,然後根據結果更改第二個查詢,即可「注入」。

其他選項(可能更好)將做到這一切在一個存儲過程,但它本質上仍然是一樣的,只是用較少的連接& prolly更快的處理

+0

換句話說,「如果要重寫查詢,則必須重新編寫查詢」。 不知道我當時在想什麼 – Loupax

+0

:-)有時我們都會陷入「神奇的方法」中 – jmadsen

相關問題