我们都喜欢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
显然我做错了什么,我在这里希望有人可以帮助我理解如何正确地运行这种查询,而不是让其他人完成查询。
答案 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_id
和ourID
的值,因此仅需要合并内部联接以合并country
的值。 ON
中的INNER JOIN
条件会选择正确的国家/地区条目。