我错过了什么?MySQL左连接第二个表中的最新条目
我需要一双新的眼睛来观察这件事。我有两个表,其中一个表有用户,第二个表包含登录记录,每个用户有多个记录。我要做的是从第一个表中选择所有条目,从第二个表中选择最近的记录,例如,所有用户的列表,但只显示最近的活动。这两个表在ID列中都具有自动增量 因此,我目前的代码是:我错过了什么?MySQL左连接第二个表中的最新条目,mysql,left-join,Mysql,Left Join,我需要一双新的眼睛来观察这件事。我有两个表,其中一个表有用户,第二个表包含登录记录,每个用户有多个记录。我要做的是从第一个表中选择所有条目,从第二个表中选择最近的记录,例如,所有用户的列表,但只显示最近的活动。这两个表在ID列中都具有自动增量 因此,我目前的代码是: SELECT u.user_id, u.name, u.email, r.rid, r.user_id FROM users AS u LEFT JOIN login_records AS r ON r.user_id = u.us
SELECT u.user_id, u.name, u.email, r.rid, r.user_id
FROM users AS u
LEFT JOIN login_records AS r ON r.user_id = u.user_id
WHERE
r.rid = (
SELECT MAX( rid )
FROM login_records
WHERE user_id = u.user_id
)
我已经搜索了类似问题的答案,并尝试了所有问题,但结果要么没有返回结果,要么只得到奇怪的结果,不一定是最新的结果。两个表中的ID都是自动递增的,所以我认为为特定用户获取唯一或最高的ID应该是一件相对简单的事情,但它要么不返回任何内容,要么每次都返回完全不同的选择
这是我第一次使用JOIN-我是否有错误的JOIN?我是否需要以不同的方式对事物进行排序或分组
谢谢你的帮助。这一定很简单,因为Danny Coulombe的答案似乎适用于其他用户。用记录id替换所有rid in where子句和腐蚀子查询如何
测试您必须按要按描述显示的列排序,例如按上次登录描述排序
将last_login列更改为您想要订购的列,但您必须在选择后首先声明last_login列。您将需要一个子查询我相信: 以及查询:
SELECT
u.user_id, ul.latest_login_id
FROM users u
LEFT JOIN
(
SELECT user_id, MAX(user_login_id) latest_login_id
FROM users_logins
GROUP BY user_id
) ul ON u.user_id = ul.user_id
你能共享这两个表的结构吗?当有记录\u id时为什么要使用rid?我认为应该是-LEFT JOIN login\u records AS r ON u.user\u id=r.user\u id,因为连接将从连接条件左侧的表中获取数据。@LukStorms已修复。这两个地方都是rid。这将排除所有从未登录的用户。如果这是需要的-那么查询ahoi@嘿,你说得对。好的。那些不会有max record_id。哦,好吧,这很容易修复。先生,你太棒了……这就成功了。我已经经历了一些事情试图使我的桌子正常化,在这之前一切都很顺利,这让我难堪了4天…谢谢你的帮助!
CREATE TABLE users (
user_id INT UNSIGNED NOT NULL
AUTO_INCREMENT PRIMARY KEY
);
CREATE TABLE users_logins (
user_login_id INT UNSIGNED NOT NULL
AUTO_INCREMENT PRIMARY KEY,
user_id INT UNSIGNED NOT NULL
);
INSERT INTO users SELECT 1;
INSERT INTO users SELECT 2;
INSERT INTO users_logins SELECT 1,1;
INSERT INTO users_logins SELECT 2,1;
INSERT INTO users_logins SELECT 3,1;
INSERT INTO users_logins SELECT 4,1;
INSERT INTO users_logins SELECT 5,2;
INSERT INTO users_logins SELECT 6,2;
SELECT
u.user_id, ul.latest_login_id
FROM users u
LEFT JOIN
(
SELECT user_id, MAX(user_login_id) latest_login_id
FROM users_logins
GROUP BY user_id
) ul ON u.user_id = ul.user_id