MySQL选择列的唯一行条目作为新视图或表中的列

时间:2013-04-30 22:09:30

标签: mysql select join union

我陷入两难境地。我正在使用CMS创建一个数据库表,其中的记录填充如下:

+------------+----------------+
| field_name |  field_value   |
+------------+----------------+
| your-name  | Adam           |
| your-email | adam@email.com |
| your-name  | Ben            |
| your-email | en@email.com   |
+------------+----------------+

其中field_name和field_value是列名。此外,“您的姓名”和“您的电子邮件”是网页中表单的输入名称。

(还有其他列,但没有一列有唯一的行条目)

我的问题是,我如何创建一个表或视图,以便我可以从上表中找到它?

+-----------+----------------+
| your-name |   your-email   |
+-----------+----------------+
| Adam      | Adam@email.com |
| Ben       | Ben@email.com  |
+-----------+----------------+

我已经考虑过制作视图并加入它们,但我似乎无法让它发挥作用。

有任何想法如何实现这个?

谢谢!

2 个答案:

答案 0 :(得分:0)

你的桌子上有身份证吗?如果有,你可以使用它:

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

答案 1 :(得分:0)

你的表1是不是有这样的id列(所以(id,field_name)是这个表的主键)?

+----+------------+----------------+
| id | field_name |  field_value   |
+----+------------+----------------+
| 1  | your-name  | Adam           |
| 1  | your-email | adam@email.com |
| 2  | your-name  | Ben            |
| 2  | your-email | en@email.com   |
+----+------------+----------------+

然后你可以做......

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