我有下表
tbl_user
uid first_name last_name email_id
1 steve martin steve1@gmail.com
2 mark lee mark1@gmail.com
3 nelson wise nelson23@gmail.com
tbl_tier
tier_id tier_name points_required
1 Silver 100
2 Gold 200
3 Platinum 300
tbl_tier_earned
id tier_id uid
1 1 1
2 2 1
3 3 1
4 1 2
5 2 2
6 1 3
我需要当前级别的唯一用户,例如:
first_name last_name email_id current_tier
steve martin steve1@gmail.com Platinum
mark lee mark1@gmail.com Gold
我尝试了以下查询,但它只给了我 1 个结果:
SELECT u.first_name,u.last_name,u.email_id, t.tier_name
FROM tbl_tier_earned AS tte
INNER JOIN tbl_user AS u
ON u.uid = tte.uid
INNER JOIN tbl_tier AS t
ON tte.tier_id = t.tier_id
WHERE u.email_id!=""
ORDER BY t.points_required DESC LIMIT 0,1
如何使用 mysql 查询检索以上数据?
最佳答案
看来当前等级是由每个用户的 tbl_tier_earned
表中的最大 tier_id
给出的。这里的一种方法是将用户表连接到 tbl_tier_earned
表上的子查询,该表查找最大层。
SELECT
u.first_name,
u.last_name,
u.email_id,
COALESCE(t2.tier_name, 'NA') AS current_tier
FROM tbl_user u
LEFT JOIN
(
SELECT uid, MAX(tier_id) AS max_tier_id
FROM tbl_tier_earned
GROUP BY uid
) t1
ON u.uid = t1.uid
LEFT JOIN tbl_tier t2
ON t1.max_tier_id = t2.tier_id;
关于MySQL 在一个查询中使用多个联接来获取结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48860993/