2013-04-30 18 views
0

我有一個困境。我正在使用CMS創建數據庫表,其中記錄的填充方式如下:MySQL在一個新視圖或表格中選擇列的唯一行條目作爲列

+------------+----------------+ 
| field_name | field_value | 
+------------+----------------+ 
| your-name | Adam   | 
| your-email | [email protected] | 
| your-name | Ben   | 
| your-email | [email protected] | 
+------------+----------------+ 

其中field_name和field_value是列名稱。此外,'你的名字'和'你的電子郵件'是網頁中表單的輸入名稱。

(還有其他列,但他們都沒有一個唯一的行條目)

我的問題是,如何創建一個表或視圖,這樣我可以從上面的表中得到這個?

+-----------+----------------+ 
| your-name | your-email | 
+-----------+----------------+ 
| Adam  | [email protected] | 
| Ben  | [email protected] | 
+-----------+----------------+ 

我想過創建視圖並加入它們,但我似乎無法得到它的工作。

任何想法如何實現?

謝謝!

+0

對不起,還得補充一點:沒有獨特ID – 2013-04-30 22:46:18

回答

0

你的桌子上有ID嗎?如果你有,你可以使用這個:

SELECT 
    MAX(CASE WHEN field_name='your-name' THEN field_value END) your_name, 
    MAX(CASE WHEN field_name='your-email' THEN field_value END) your_email 
FROM 
    yourtable 
GROUP BY 
    id 

請參閱小提琴here

+0

他沒有提供身份證, – 2013-04-30 22:34:02

+0

@echo_me沒有ID是不可能回答,但我想必須有一個ID – fthiella 2013-04-30 22:35:42

+0

是的,這是這張桌子沒有ID的東西。有點奇怪。但沒有透露它是流行CMS的流行插件。 – 2013-04-30 22:54:27

0

不是你的表1有一個這樣的id列(所以(id,field_name)是這個表的主鍵)?

+----+------------+----------------+ 
| id | field_name | field_value | 
+----+------------+----------------+ 
| 1 | your-name | Adam   | 
| 1 | your-email | [email protected] | 
| 2 | your-name | Ben   | 
| 2 | your-email | [email protected] | 
+----+------------+----------------+ 

那麼你可以做...

SELECT DISTINCT myTableAlias.id, 
    (SELECT field_value FROM table 
    WHERE id=myTableAlias.id AND field_name = 'your-name') your-name, 
    (SELECT field_value FROM table 
    WHERE id=myTableAlias.id AND field_name = 'your-email') your-email, 
FROM table myTableAlias 
+0

他沒有提供ID – 2013-04-30 22:34:20

+0

不幸的是,這是一個設計不佳的數據庫。它沒有唯一的ID。 – 2013-04-30 22:45:42

+0

你確定沒有'id'字段或類似的東西嗎?考慮到關係數據庫系統對行排序沒有任何保證,你怎麼能斷定電子郵件地址adam @ email.com屬於用戶Adam?! – fjf2002 2013-04-30 23:51:51