MySQL select column name as field
19,711
Solution 1
This is called a pivot. Actually it's a reverse pivot. See here for some background. http://www.artfulsoftware.com/infotree/queries.php#78
MySQL does it the hard way. It's a pain in the neck. Many people who do lots of this kind of work in MySQL use programs to generate these queries.
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
Solution 2
You could do it like this, this will return to you 2 comma separated first one of columns second of values, which you can explode and merge into KEY/VALUE arrays in 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');
Related videos on Youtube
![Thomas Clayson](https://i.stack.imgur.com/XxQ4j.jpg?s=256&g=1)
Author by
Thomas Clayson
Updated on October 21, 2022Comments
-
Thomas Clayson over 1 year
I have a mysql table that looks something like this:
id | col_1 | col_2 | col_3 ---|-------|-------|------ 1 | 2 | 34 | 64 2 | 6 | 53 | 23
I would like to be able to query on the id and get multiple rows, one for each column. E.g:
SELECT column_name as column, column_value as value FROM my_table WHERE id=1;
Which would give me:
column | value -------|------- col_1 | 2 col_2 | 34 col_3 | 64
What would I need to use to formulate a query like this?
Many thanks
-
Thomas Clayson almost 12 yearsAh, thats useful and probably the best way to do it. :) Thanks for that
-
Kao almost 12 yearsJust updated as you accepted it, I can take it back to the old revision if you liked it better. :)
-
Thomas Clayson almost 12 yearsI wouldn't worry. Ollie's is more straightforward, but this one is more technical, so may be useful to other people who come here. :)