2012-09-06 40 views
8

Tôi có một bảng mysql mà trông giống như sau:MySQL chọn tên cột như lĩnh vực

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

Tôi muốn để có thể truy vấn trên id và nhận được nhiều hàng, mỗi cột. Ví dụ:

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

Trong đó sẽ cho tôi:

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

tôi sẽ cần những gì để sử dụng để xây dựng một truy vấn như thế này?

Rất cám ơn

Trả lời

8

Đây được gọi là trục xoay. Trên thực tế nó là một trục đảo ngược. Xem ở đây để biết một số thông tin cơ bản. http://www.artfulsoftware.com/infotree/queries.php#78

MySQL thực hiện điều đó một cách khó khăn. Đó là một cơn đau ở cổ. Nhiều người làm rất nhiều loại công việc này trong MySQL sử dụng các chương trình để tạo ra các truy vấn này.

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, điều đó hữu ích và có lẽ là cách tốt nhất để làm điều đó. :) Cảm ơn vì điều đó –

4

Bạn có thể làm điều đó như thế này, điều này sẽ trở lại với bạn 2 Comma Separated đầu tiên của cột thứ hai của các giá trị mà bạn có thể phát nổ và sáp nhập vào mảng KEY/VALUE trong 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

Cảm ơn dude! :) –

+0

Chỉ cần cập nhật khi bạn chấp nhận nó, tôi có thể đưa nó trở lại phiên bản cũ nếu bạn thích nó tốt hơn. :) – Kao

+2

Tôi sẽ không lo lắng. Ollie thì đơn giản hơn, nhưng cái này kỹ thuật hơn, vì vậy có thể hữu ích cho những người khác đến đây. :) –

Các vấn đề liên quan