2016-12-16 77 views
-1

我試圖替換選擇查詢的結果中的列,如 This reference中所示,但與示例不同,我在表中有很多列,因此我無法指定select查詢中每列的名稱。替換選擇查詢中的特定列數據?

我嘗試了一些方法來達到同樣的效果,但沒有一個看起來有效。

select 
    *, (REPLACE(REPLACE(role_id,1,"admin"),2,"moderator") AS role_id 
from user; 

Select * 
from user 
where role_id = (select REPLACE(role_id,1,"admin") as role_id from user; 

這裏,我們假設只有兩個可能的值ROLE_ID然而,在某些實例化它可能得到另一個表的數據即擁有不同的ID和值相對應的不同的表他們。

那麼,有沒有一種方法來達到以下條件在一個查詢: -

  • 來代替某些字段的值,從選擇查詢返回的(假設多列分別寫的所有列的名稱不可行)
  • 從單個表中不同列的不同表中獲取替換值。

我需要在一個查詢中實現上述條件,但更改不應該在數據庫中,只有選擇查詢的結果需要優化。

已經提到以下但也忍不住。

我使用phpMyAdmin發動機和PHP作爲實現語言。

回答

1

如果我理解正確你的問題,它更容易使用CASE/WHEN

SELECT *, 
CASE WHEN role_id = 1 THEN "admin" WHEN role_id = 2 THEN "moderator" END AS role_id 
FROM user; 

但較易仍可能有PHP中的數組,

$roles = array("1" => "admin", "2" => "moderator", ....); 

,並在看它陣列。這將保持您的查詢短而甜。這種方法的優點是每次添加新角色時都不需要更改查詢。如果你得到大量的角色(比如幾十個),你可能實際上需要一個單獨的表格。

+0

感謝您的幫助,我試過case/when too但因爲我需要從各種表中動態地獲取替換數據,因此這並沒有太大的幫助,實施PHP數組的問題是,由於使用結果在很多平臺上,我需要優化sql查詢itlself, – OshoParth

+1

我已經根據您提供的信息回答了問題。 – e4c5

+1

最優化的解決方案是做php數組,因爲它根本不會對數據庫造成任何壓力。但是,如果表是索引索引的,則包含角色的表上的聯接將同樣有效。 – e4c5