2012-09-06 18 views
8

Mam tabeli mysql, który wygląda mniej więcej tak:MySQL wybierz nazwę kolumny jako pola

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

chciałbym móc zapytać o identyfikator i dostać wiele wierszy, po jednym dla każdej kolumny. Np:

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

co dałoby mi:

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

Co bym musiał użyć sformułowania zapytania jak to?

Wielkie dzięki

Odpowiedz

8

To się nazywa pivot. W rzeczywistości jest to odwrotna oś obrotowa. Zobacz tutaj dla niektórych tła. http://www.artfulsoftware.com/infotree/queries.php#78

MySQL robi to na swój sposób. To ból w szyi. Wielu ludzi, którzy robią dużo tego rodzaju pracy w programach użytkowych MySQL, generuje te zapytania.

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

Ah, to użyteczne i prawdopodobnie najlepszy sposób na zrobienie tego. :) Dzięki za to –

4

Można zrobić to w ten sposób, będzie to powrót do ciebie 2 oddzielonych przecinkami pierwszy kolumn sekund wartości, które mogą wybuchnąć pod tablicami i scalić klucz/wartość w 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

Dzięki stary! :) –

+0

Po aktualizacji, mogę ją przywrócić do starej wersji, jeśli jej się podobało. :) – Kao

+2

Nie martwiłbym się. Ollie jest prostszy, ale ten jest bardziej techniczny, więc może być przydatny dla innych ludzi, którzy tu przyjeżdżają. :) –

Powiązane problemy