2016-12-16 6 views
-1

ので、私は選択クエリ内のすべての列の名前を指定することはできません私は This referenceに示すように、選択クエリの結果に列を交換しようとしていますが、例とは異なり、私はテーブル内の多くの列を持っています。選択クエリで特定の列データを置き換えますか?

私は同じことを達成するためにいくつかの方法を試してみましたが、どれも効果的なようです。

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; 

は、我々はそれが異なるIDに対応する値を保持する別のテーブルすなわち、別のテーブルからデータを取得する必要があるかもしれませんが、特定のインスタンス化でROLE_IDのために2つだけの可能な値をとりますそれら。

だから、単一のクエリで、以下の条件を達成するための方法がある: -

  • いくつかのフィールドの値を置き換えるために、すべての列の名前を書いて多くの列を想定して(選択クエリから返される個別ではありません可能性)
  • 単一テーブル内の異なる列の異なるテーブルからの置換値を取得する。

私は1つのクエリで上記の条件を実装する必要がありますが、変更はデータベースに存在してはならず、選択クエリの結果のみを最適化する必要があります。

すでに以下を参照していますが、手助けができませんでした。

私は実装言語としてエンジンやPHPなどのphpMyAdminを使用しています。

答えて

1

私が正しくあなたの質問を理解している場合は、/ 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", ....); 

と比較してくださいCASEを使用する方が簡単ですアレイ。あなたの質問を短くて甘いものにするでしょう。この方法の利点は、新しいロールを追加するたびにクエリを変更する必要がないことです。あなたが数多くの役割(例えば、何十もの)を得るなら、実際には別のテーブルが必要になるかもしれません。

+0

支援するためのおかげで、私はケース/とき、あまりにも試してみましたが、私は様々な表からあまりにも動的に交換用のデータをフェッチする必要があるとして、このように、これはあまり役に立たないが、また、PHPの配列を実装するとの問題が原因で、結果の使用するということです多くのプラットフォームでは、SQLクエリ自体を最適化する必要があります。 – OshoParth

+1

あなたが提供した情報に基づいて質問に回答しました。 – e4c5

+1

最も最適化された解決策は、データベースに何の負荷もかけないので、php配列を行うことです。しかし、ロールが含まれているテーブルのジョインは、テーブルのインデックスが適切であれば効率的です。 – e4c5

関連する問題