2016-06-23 17 views
2

Wordpressデータベースのwp_usermetaテーブルからデータを取得しようとしています。ケースWHENクエリが期待した結果を返さない

umeta_id | user_id | meta_key | meta_value 
1  | 1  | role  | admin 
2  | 1  | lat  | 12.34456 
3  | 1  | lng  | 9.392933 
4  | 2  | role  | user 
5  | 2  | lat  | 8.694840 
6  | 2  | lng  | 29.32930 
7  | 3  | role  | subscriber 
8  | 3  | lat  | 32.32323 
9  | 3  | lng  | 3.222222 
10  | 3  | some key | some value 
... and so on 

は今はmeta_keyのあることによって定義される緯度と経度を持つエントリテーブルの内部座標を持っている:それにfamilliarない人、次のような構造であるため

"lat"または "long"で、meta_valueは座標です。

私は、彼らの緯度と長いCOORDSで、各ユーザーを取得したいのですが、このように:そのために

user_id | lat  | lng 
1  | 12.34456 | 9.392933 
2  | 8.694840 | 29.32930 
3  | 32.32323 | 3.222222 

私は現在、このクエリを使用しています:私だけを与える

SELECT umeta.user_id, 
max(CASE WHEN umeta.meta_key = "lat" THEN umeta.meta_value END) AS lat, 
max(CASE WHEN umeta.meta_key = "lng" THEN umeta.meta_value END) AS lng 
FROM wp_usermeta umeta 

user_id | lat  | lng 
1  | 12.34456 | 9.392933 

あなたは私が間違っていることを知っていますか? 本当に感謝します!あなたは予想通り、ピボット問合せ作業を行うためのユーザーIDによってグループもする必要が

答えて

3

:あなたがこれを必要としないかもしれませんが

SELECT umeta.user_id, 
     MAX(CASE WHEN umeta.meta_key = "lat" THEN umeta.meta_value ELSE 0 END) AS lat, 
     MAX(CASE WHEN umeta.meta_key = "lng" THEN umeta.meta_value ELSE 0 END) AS lng 
FROM wp_usermeta umeta 
GROUP BY umeta.user_id 

私は、0値を設定し、明示的なELSE条件が含まれています。

+1

問題を解決しました。ありがとうございます! :) – Philex

1

あなたがGROUP BYを使用する必要があります。GROUP BY句なし

SELECT umeta.user_id, 
     max(CASE WHEN umeta.meta_key = "lat" THEN umeta.meta_value END) AS lat, 
     max(CASE WHEN umeta.meta_key = "lng" THEN umeta.meta_value END) AS lng 
FROM wp_usermeta umeta 
GROUP BY umeta.user_id 

SELECT句で集計関数を含むクエリは、常につのレコードを返します。

+0

あなたの助けてくれてありがとう、それは問題を解決しました:) – Philex

関連する問題