Mysql 查询未返回预期结果时的情况

Mysql 查询未返回预期结果时的情况,mysql,wordpress,Mysql,Wordpress,我试图从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 | use

我试图从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_键定义为lat或long,meta_值定义为坐标

我想让每个用户都有他们的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
你们知道我做错了什么吗?
非常感谢你的帮助

您还需要按用户id分组,以使pivot查询按预期工作:

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值,尽管您可能不需要它。

您必须使用GROUP BY:

如果没有GROUPBY子句,则SELECT子句中包含聚合函数的查询将始终返回一条记录

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