Mysql 查询 3 个表和用户元
Mysql query for 3 tables & user meta
我正在尝试创建一个 mysql 查询以将 3 table 条数据连接到一行中。但是,由于用户元 table 的布局方式,我遇到了一些问题。 table的结构如下:
用户
id user_login user_registered
1 user1 18/06/2018
2 user2 18/06/2018
用户元
user_id meta_key meta_value
1 color blue
1 type train
2 color red
2 type car
member_subscription
user_id status
1 active
2 active
我想 select 每个用户的 user_login 仅在今天的日期 user_registered 并将他们的 ID 与用户元 [=42] 的 user_id 连接起来=] 和 member_subscription table 但仅在 member_subscription table 中的状态为 = 'active',并且还包括每个用户的相关元数据,因此我最终得到以下结果:
user_login color type
user1 blue train
user2 red car
非常感谢任何帮助,因为我真的很努力解决这个问题。
我不确定这是否是最有效的方法,但如果您加入 table 两次,它会很容易根据您的必要条件过滤掉。类似于:
SELECT u.user_login, um1.meta_value AS color, um2.meta_value AS type
FROM users u
LEFT JOIN usermeta um1
ON um1.user_id=u.id
AND um1.meta_key='color'
LEFT JOIN usermeta um2
ON um2.user_id=u.id
AND um2.meta_key='type'
JOIN member_subscription ms
ON ms.user_id=u.id
WHERE ms.status='active'
对于 Entity–attribute–value model aka EAV 结构以在不同的列中列出属性,您可以通过加入您的元 table 来根据您的属性使用条件聚合,例如
SELECT u.id,
u.user_login,
MAX(CASE
WHEN m.meta_key = 'color' THEN m.meta_value
ELSE NULL
END) AS color,
MAX(CASE
WHEN m.meta_key = 'type' THEN m.meta_value
ELSE NULL
END) AS type
FROM users u
JOIN usermeta m
ON m.user_id = u.id
JOIN member_subscription ms
ON ms.user_id = u.id
WHERE ms.status = 'active'
GROUP BY u.id,
u.user_login
我正在尝试创建一个 mysql 查询以将 3 table 条数据连接到一行中。但是,由于用户元 table 的布局方式,我遇到了一些问题。 table的结构如下:
用户
id user_login user_registered
1 user1 18/06/2018
2 user2 18/06/2018
用户元
user_id meta_key meta_value
1 color blue
1 type train
2 color red
2 type car
member_subscription
user_id status
1 active
2 active
我想 select 每个用户的 user_login 仅在今天的日期 user_registered 并将他们的 ID 与用户元 [=42] 的 user_id 连接起来=] 和 member_subscription table 但仅在 member_subscription table 中的状态为 = 'active',并且还包括每个用户的相关元数据,因此我最终得到以下结果:
user_login color type
user1 blue train
user2 red car
非常感谢任何帮助,因为我真的很努力解决这个问题。
我不确定这是否是最有效的方法,但如果您加入 table 两次,它会很容易根据您的必要条件过滤掉。类似于:
SELECT u.user_login, um1.meta_value AS color, um2.meta_value AS type
FROM users u
LEFT JOIN usermeta um1
ON um1.user_id=u.id
AND um1.meta_key='color'
LEFT JOIN usermeta um2
ON um2.user_id=u.id
AND um2.meta_key='type'
JOIN member_subscription ms
ON ms.user_id=u.id
WHERE ms.status='active'
对于 Entity–attribute–value model aka EAV 结构以在不同的列中列出属性,您可以通过加入您的元 table 来根据您的属性使用条件聚合,例如
SELECT u.id,
u.user_login,
MAX(CASE
WHEN m.meta_key = 'color' THEN m.meta_value
ELSE NULL
END) AS color,
MAX(CASE
WHEN m.meta_key = 'type' THEN m.meta_value
ELSE NULL
END) AS type
FROM users u
JOIN usermeta m
ON m.user_id = u.id
JOIN member_subscription ms
ON ms.user_id = u.id
WHERE ms.status = 'active'
GROUP BY u.id,
u.user_login