2016-12-16 5 views
-2

私はこのデータをMysql 5データベースのテーブルに保存しています。いくつかの名前/値フィールドからMysqlのフィールドを取得する方法

表データ

| 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

'CASE'ステートメントを使用して' attrValue'カラムを解析し、新しいカラム名を複数回使用する 'select'文を実行します。 – Abdul

+0

[Here](http: /stackoverflow.com/questions/26909661/how-to-split-a-column-into-multiple-columns-ordered-by-date)は非常に似た質問です – Abdul

+0

これは適切な[EAVデータモデル](https: //en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model)、アトリビュートテーブルは、アトリビュートを相互に関連付けるどこかに存在する必要があります。それ以外の場合は、どの属性を1つの結果行にグループ化するかをどのように知ることができますか? –

答えて

0

あなたは、属性の「グループ」を決定するために、テーブル内の行の順序に頼っているように見えます。

しかし、SQLでは、暗黙的な表内の行の順序や位置はありません。行の順序付けまたはグループ化は、値列によってのみ行えます。

だから、それらを関連付けるために列を追加する必要があります。

| 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 | 

次にあなたがタグの下に他の場所で十分に文書化されているさまざまなソリューションを、使用することができます。例えば

:あなたがそれを行うにはしたくない場合は、あなたの代わりにこのキーと値の設計の適切な列に属性を入れて、別々にデータを格納する必要があり

SELECT eventId, 
    MAX(CASE attrName WHEN 'timestamp' THEN attrValue END) as timestamp, 
    MAX(CASE attrName WHEN 'price' THEN attrValue END) as price, 
    MAX(CASE attrName WHEN 'current_p' THEN attrValue END) as current_p, 
    MAX(CASE attrName WHEN 'price_dev' THEN attrValue END) as price_dev, 
FROM WhateverMyTableNameIs 
GROUP BY eventid 

+0

ありがとう、ビル、私はビルのソリューションの問題を解決しました – pasquy73

+0

幸いにもrecTimeパラメータ(eventIdとして)があります。 – pasquy73

関連する問題