8

私は次のようなmysqlテーブルを持っています:

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

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

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

それは私に与えるでしょう:

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

このようなクエリを作成するには、何を使用する必要がありますか?

どうもありがとう

4

2 に答える 2

9

これはピボットと呼ばれます。実際には逆ピボットです。背景については、こちらをご覧ください。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
于 2012-09-06T11:54:45.560 に答える
4

このように行うことができます。これにより、値の2番目の列の最初の1つがコンマで区切られた2つが返されます。これを分解して、PHPのKEY/VALUE配列にマージできます。

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');       
于 2012-09-06T11:56:52.573 に答える