复杂的转换和连接不起作用
Complex Transformation & Joins Not Working
我遇到了一个复杂的 MySQL 查询。我试过加入,我试过使用 where X=Y 子句将多个 WordPress table 合并在一起。
我试图做的是导出 WordPress 用户,包括与来自另一个 table.
的 activity 信息合并的特定用户元数据
如果你不熟悉WordPress的table结构,这里是tables
相关内置的总结
_usermeta
umeta_id
user_id
meta_key
meta_value
1
1
first_name
Kevin
2
1
last_name
Gee
3
1
ID_number
123456
_用户
ID
user_login
user_pass
...
user_email
...
1
kevin
...
...
kevin@example.com
...
_posts
ID
...
post_title
...
1
...
Course Name
...
我们正在使用的插件是 Learn Dash,我们正在尝试从下面的 table
中提取 activity 信息
_learndash_user_activity
activity_id
user_id
post_id
course_id
activity_type
activity_status
activity_started
activity_completed
activity_updated
34
5
252
252
course
1
1612283718
1614975038
1614975038
35
5
271
252
lesson
1
1612283818
1614976038
1614975034
要将元数据转换成有用的东西,我知道我可以做这样的事情,它让我得到用户的姓名、ID 信息和电子邮件地址
SELECT _usermeta.user_id,
MAX(CASE WHEN _usermeta.meta_key = "first_name" THEN _usermeta.meta_value END) "First Name",
MAX(CASE WHEN _usermeta.meta_key = "last_name" THEN _usermeta.meta_value END) "Last Name",
MAX(CASE WHEN _usermeta.meta_key = "ID_number" THEN _usermeta.meta_value END) "ID Number",
_users.user_email as "Email Address"
FROM _usermeta
JOIN _users on _usermeta.user_id = _users.ID
GROUP BY _usermeta.user_id
而且,我可以这样抓取已完成的课程信息
SELECT
_learndash_user_activity.user_id as "User ID",
_posts.post_title as "Course Name",
FROM_UNIXTIME(_learndash_user_activity.activity_completed) as "Completed Timestamp"
FROM _learndash_user_activity
JOIN _posts on _learndash_user_activity.post_id = _posts.ID
WHERE
_learndash_user_activity.activity_type = 'course' AND
_learndash_user_activity.activity_status = 1 AND
_learndash_user_activity.activity_completed IS NOT NULL
returntable 用户 ID 为
的所有已完成课程
但是,当我尝试在 user_id 的另一个连接上将这两个查询合并在一起以将所有内容组合在一起时,我要么超时查询,因为它永远不会结束,要么我得到一个永无止境的垃圾输出数据.
我的目的是生成一个像这样的 table
_output
_usermeta.user_id
_usermeta.meta_key(first_name)
_usermeta.meta_key(last_name)
_users.user_email
_usermeta.meta_key(id_number)
_posts.post_title
_learndash_user_activity.activity_completed
1
Kevin
Gee
email_address
123456
Course 101
January 31, 2021
2
Test
User
email_address
654321
Course 101
February 1, 2021
1
Kevin
Gee
email_address
123456
Course 102
February 6, 2021
将这两个查询合并到 return 类似于我上面的 table 的有用信息的最佳方法是什么。这可以通过单个查询实现吗?
感谢您提供的任何建议!
您需要加入生物查询
SELECT
t1.user_id,
t1.`First Name`,
t1.`Last Name`,
t1.`ID Number`,
t2.`Course Name`,
t2.`Completed Timestamp`
FROM
(SELECT _usermeta.user_id,
MAX(CASE WHEN _usermeta.meta_key = "first_name" THEN _usermeta.meta_value END) "First Name",
MAX(CASE WHEN _usermeta.meta_key = "last_name" THEN _usermeta.meta_value END) "Last Name",
MAX(CASE WHEN _usermeta.meta_key = "ID_number" THEN _usermeta.meta_value END) "ID Number",
_users.user_email as "Email Address"
FROM _usermeta
JOIN _users on _usermeta.user_id = _users.ID
GROUP BY _usermeta.user_id) t1
JOIN
(SELECT
_learndash_user_activity.user_id as "User ID",
_posts.post_title as "Course Name",
FROM_UNIXTIME(_learndash_user_activity.activity_completed) as "Completed Timestamp"
FROM _learndash_user_activity
JOIN _posts on _learndash_user_activity.post_id = _posts.ID
WHERE
_learndash_user_activity.activity_type = 'course' AND
_learndash_user_activity.activity_status = 1 AND
_learndash_user_activity.activity_completed IS NOT NULL) te ON t1.user_id = t2.user_id
我遇到了一个复杂的 MySQL 查询。我试过加入,我试过使用 where X=Y 子句将多个 WordPress table 合并在一起。
我试图做的是导出 WordPress 用户,包括与来自另一个 table.
的 activity 信息合并的特定用户元数据如果你不熟悉WordPress的table结构,这里是tables
相关内置的总结_usermeta
umeta_id | user_id | meta_key | meta_value |
---|---|---|---|
1 | 1 | first_name | Kevin |
2 | 1 | last_name | Gee |
3 | 1 | ID_number | 123456 |
_用户
ID | user_login | user_pass | ... | user_email | ... |
---|---|---|---|---|---|
1 | kevin | ... | ... | kevin@example.com | ... |
_posts
ID | ... | post_title | ... |
---|---|---|---|
1 | ... | Course Name | ... |
我们正在使用的插件是 Learn Dash,我们正在尝试从下面的 table
中提取 activity 信息_learndash_user_activity
activity_id | user_id | post_id | course_id | activity_type | activity_status | activity_started | activity_completed | activity_updated |
---|---|---|---|---|---|---|---|---|
34 | 5 | 252 | 252 | course | 1 | 1612283718 | 1614975038 | 1614975038 |
35 | 5 | 271 | 252 | lesson | 1 | 1612283818 | 1614976038 | 1614975034 |
要将元数据转换成有用的东西,我知道我可以做这样的事情,它让我得到用户的姓名、ID 信息和电子邮件地址
SELECT _usermeta.user_id,
MAX(CASE WHEN _usermeta.meta_key = "first_name" THEN _usermeta.meta_value END) "First Name",
MAX(CASE WHEN _usermeta.meta_key = "last_name" THEN _usermeta.meta_value END) "Last Name",
MAX(CASE WHEN _usermeta.meta_key = "ID_number" THEN _usermeta.meta_value END) "ID Number",
_users.user_email as "Email Address"
FROM _usermeta
JOIN _users on _usermeta.user_id = _users.ID
GROUP BY _usermeta.user_id
而且,我可以这样抓取已完成的课程信息
SELECT
_learndash_user_activity.user_id as "User ID",
_posts.post_title as "Course Name",
FROM_UNIXTIME(_learndash_user_activity.activity_completed) as "Completed Timestamp"
FROM _learndash_user_activity
JOIN _posts on _learndash_user_activity.post_id = _posts.ID
WHERE
_learndash_user_activity.activity_type = 'course' AND
_learndash_user_activity.activity_status = 1 AND
_learndash_user_activity.activity_completed IS NOT NULL
returntable 用户 ID 为
的所有已完成课程但是,当我尝试在 user_id 的另一个连接上将这两个查询合并在一起以将所有内容组合在一起时,我要么超时查询,因为它永远不会结束,要么我得到一个永无止境的垃圾输出数据.
我的目的是生成一个像这样的 table
_output
_usermeta.user_id | _usermeta.meta_key(first_name) | _usermeta.meta_key(last_name) | _users.user_email | _usermeta.meta_key(id_number) | _posts.post_title | _learndash_user_activity.activity_completed |
---|---|---|---|---|---|---|
1 | Kevin | Gee | email_address | 123456 | Course 101 | January 31, 2021 |
2 | Test | User | email_address | 654321 | Course 101 | February 1, 2021 |
1 | Kevin | Gee | email_address | 123456 | Course 102 | February 6, 2021 |
将这两个查询合并到 return 类似于我上面的 table 的有用信息的最佳方法是什么。这可以通过单个查询实现吗?
感谢您提供的任何建议!
您需要加入生物查询
SELECT
t1.user_id,
t1.`First Name`,
t1.`Last Name`,
t1.`ID Number`,
t2.`Course Name`,
t2.`Completed Timestamp`
FROM
(SELECT _usermeta.user_id,
MAX(CASE WHEN _usermeta.meta_key = "first_name" THEN _usermeta.meta_value END) "First Name",
MAX(CASE WHEN _usermeta.meta_key = "last_name" THEN _usermeta.meta_value END) "Last Name",
MAX(CASE WHEN _usermeta.meta_key = "ID_number" THEN _usermeta.meta_value END) "ID Number",
_users.user_email as "Email Address"
FROM _usermeta
JOIN _users on _usermeta.user_id = _users.ID
GROUP BY _usermeta.user_id) t1
JOIN
(SELECT
_learndash_user_activity.user_id as "User ID",
_posts.post_title as "Course Name",
FROM_UNIXTIME(_learndash_user_activity.activity_completed) as "Completed Timestamp"
FROM _learndash_user_activity
JOIN _posts on _learndash_user_activity.post_id = _posts.ID
WHERE
_learndash_user_activity.activity_type = 'course' AND
_learndash_user_activity.activity_status = 1 AND
_learndash_user_activity.activity_completed IS NOT NULL) te ON t1.user_id = t2.user_id