我正在尝试从Wordpress数据库的wp_usermeta表中获取数据。
对于那些不熟悉它的人来说,结构如下:
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定义为" lat"或者"长" meta_value是坐标。
我想让每个用户使用他们的lat和long 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
你们有什么想法我做错了吗? 帮助真的很感激!
答案 0 :(得分:3)
您还需要按用户ID进行分组,以使透视查询按预期工作:
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
我在显式ELSE
条件中设置了0值,但您可能不需要这个。
答案 1 :(得分:1)
您必须使用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
如果没有GROUP BY
子句,则SELECT
子句中包含聚合函数的查询将返回始终一条记录。