Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我错过了什么?MySQL左连接第二个表中的最新条目_Mysql_Left Join - Fatal编程技术网

我错过了什么?MySQL左连接第二个表中的最新条目

我错过了什么?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

我需要一双新的眼睛来观察这件事。我有两个表,其中一个表有用户,第二个表包含登录记录,每个用户有多个记录。我要做的是从第一个表中选择所有条目,从第二个表中选择最近的记录,例如,所有用户的列表,但只显示最近的活动。这两个表在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.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