如何从几个名称/值字段中获取Mysql中的字段

时间:2016-12-16 17:16:32

标签: mysql entity-attribute-value

我将这些数据存储在Mysql 5数据库的表中。

表格数据

| attrName   | attrValue                |
-----------------------------------------
| price       | 12.23                   |
| current_p   | 23.99                   |
| price_dev   | 0.1222                  |
| timestamp   | 2009-07-14 00:00:00 EDT |
| price       | 14.23                   |
| current_p   | 13.11                   |
| price_dev   | 0.7444                  |
| timestamp   | 2009-07-14 00:01:00 EDT |
| price       | 11.00                   |
| current_p   | 18.55                   |
| price_dev   | 0.3572                  |
| timestamp   | 2009-07-14 00:02:00 EDT |

现在我想进行查询以这种方式显示所有数据(按时间戳排序)

| timestamp               | price   | current_p | price_dev |
-------------------------------------------------------------
| 2009-07-14 00:00:00 EDT | 12.23   | 23.99       | 0.1222  |
| 2009-07-14 00:01:00 EDT | 14.23   | 13.11       | 0.7444  |
| 2009-07-14 00:02:00 EDT | 11.00   | 18.55       | 0.3572  |

你能建议我正确的查询吗?

非常感谢,

pasquy73

1 个答案:

答案 0 :(得分:1)

您似乎依赖于表中行的顺序来确定"组"属性。

但是在SQL中,表中的行没有隐式顺序或位置,您只能通过某个值列对行进行排序或分组。

所以你必须添加一个列来关联它们:

dX = 0

然后您可以使用各种解决方案,这些解决方案在标记下的其他位置有详细记录。

例如:

| eventId | attrName   | attrValue                |
-------------------------------------------------
|    1234 | price       | 12.23                   |
|    1234 | current_p   | 23.99                   |
|    1234 | price_dev   | 0.1222                  |
|    1234 | timestamp   | 2009-07-14 00:00:00 EDT |
|    1235 | price       | 14.23                   |
|    1235 | current_p   | 13.11                   |
|    1235 | price_dev   | 0.7444                  |
|    1235 | timestamp   | 2009-07-14 00:01:00 EDT |
|    1236 | price       | 11.00                   |
|    1236 | current_p   | 18.55                   |
|    1236 | price_dev   | 0.3572                  |
|    1236 | timestamp   | 2009-07-14 00:02:00 EDT |

如果您不想这样做,那么您必须以不同的方式存储数据,将属性放在适当的列中而不是此键值设计。