加入Wordpress usermeta查询

时间:2016-01-29 17:25:29

标签: mysql database wordpress join

我们都喜欢wordpress吗?

所以我不得不使用基本上具有这种结构的usermeta表。

umeta_id | user_id | meta_key | meta_value

由于某些原因,一些内部开发人员插件在此表上写了很多其他信息,最近我赢得了使用它的职责,并提取了一些重要信息,我需要导出并保存在实际制作的结构中对Web应用程序的感觉。

举一个例子,我可以找到这种数据:

umeta_id | user_id | meta_key | meta_value
 1       | 1       | ourID    | asdad878d7a
 2       | 1       | country  | fooland
 3       | 1       | firstname| foo
 4       | 1       | lastname | bar

我想创建一个类似于这种结构的结果:

user_id  | ourID       | country
 1       | asdad878d7a | fooland

我尝试了一些东西,但实际上这种结构也不是我习惯的东西。

这是我目前的查询:

SELECT meta.umeta_id as umeta_id, meta.user_id as user_id, channel.meta_value as ourID, country.meta_value as country
FROM usermeta as meta
INNER JOIN usermeta as channel
INNER JOIN usermeta as country
WHERE channel.meta_key = 'ourID'
AND country.meta_key = 'country'

但结果基本上是错误的。我有相同user_id的大量重复,分配给user_id的每一行,但只报告选择的字段而不是值。现在虽然这有意义,但我不知道如何正确地编写此查询。

这样的事情:

umeta_id | user_id | ourID       | country 
 1       | 51424   | UC6Y94UM6rj | United Kingdom
 1       | 51424   | UC6Y94UM6rj | Italy
 1       | 51424   | UC6Y94UM6rj | Italy
 1       | 51424   | UC6Y94UM6rj | Italy
 1       | 51424   | UC6Y94UM6rj | Croatia
 1       | 51424   | UC6Y94UM6rj | United States
 1       | 51424   | UC6Y94UM6rj | Croatia

显然我做错了什么,我在这里希望有人可以帮助我理解如何正确地运行这种查询,而不是让其他人完成查询。

1 个答案:

答案 0 :(得分:1)

这会让你更接近你想要的东西吗?

SELECT meta.umeta_id as umeta_id, meta.user_id as user_id, meta.meta_value as ourID, country.meta_value as country
FROM usermeta as meta
INNER JOIN usermeta as country ON meta.user_id = country.user_id
WHERE meta.meta_key = 'ourID' 
AND country.meta_key = 'country'

逻辑是首先找到具有meta_key'ourID'的条目。从此条目中选取user_idourID的值,因此仅需要合并内部联接以合并country的值。 ON中的INNER JOIN条件会选择正确的国家/地区条目。