2012-09-06 22 views
8

として、列名を選択します。MySQLは、私は次のようになりますmysqlのテーブルを持っている分野

id | col_1 | col_2 | col_3 
---|-------|-------|------ 
1 | 2  | 34 | 64 
2 | 6  | 53 | 23 

私はIDに照会し、複数の行、各列のための1つを取得できるようにしたいと思います。例えば:

column | value 
-------|------- 
col_1 | 2 
col_2 | 34 
col_3 | 64 

を、私はこのようなクエリを定式化するために使用する必要があるだろうか:私を与えるだろう

SELECT column_name as column, column_value as value FROM my_table WHERE id=1; 

多くの感謝

答えて

8

これはピボットと呼ばれます。実際は逆のピボットです。背景についてはこちらをご覧ください。 http://www.artfulsoftware.com/infotree/queries.php#78

MySQLは難しい方法です。首に痛みがあります。 MySQLでこの種の作業をたくさん行う人の多くは、これらのクエリを生成するためのプログラムを使用しています。あなたはこのようにそれを行うことができ

SELECT `column`, column_value 
    FROM (
    SELECT id, 'col_1' as `column`, col_1 as column_value FROM tab 
    UNION 
    SELECT id, 'col_2' as `column`, col_2 as column_value FROM tab 
    UNION 
    SELECT id, 'col_3' as `column`, col_3 as column_value FROM tab 
) pivot 
    WHERE id=1 
+0

ああ、それを行うにはおそらく最良の方法です。 :)ありがとうございました –

4

、これは2カンマを使用すると、爆発やPHPでのキー/値の配列にマージすることができます秒の値の列の最初のものを分離し、あなたに戻ります。

SELECT 
    GROUP_CONCAT(COLUMN_NAME) AS _columns, 
    (SELECT 
      GROUP_CONCAT(columnName, ',', columnName) 
     FROM table_name 
     WHERE id = 1) 
FROM 
    information_schema.columns 
WHERE 
    table_name = 'table_name' 
     AND COLUMN_NAME IN ('columnName' , 'columnName');  
+0

ありがとう! :) –

+0

あなたがそれを受け入れるようにちょうど更新されました、あなたはそれがより好きなら、私は古いリビジョンに戻すことができます。 :) – Kao

+2

私は心配しません。 Ollieはもっと簡単ですが、これは技術的なものなので、ここに来る他の人には役に立つかもしれません。 :) –

関連する問題