php - 如何从两个表连接中选择一个值?
问题描述
我正在尝试在 Laravel/MySQL 中实现某些目标,但似乎无法为解决方案指明正确的方向。我可以通过子查询来实现我正在寻找的东西,但我被告知它们不如连接有效。而且,我将不得不将此解决方案转换为 Eloquent/Query Builder,而我使用子查询和联合的方式似乎并不容易转换。
我要做的是根据行的created_at
日期从两个可能的表中选择一行。我想将此created_at
值与我的用户表作为一个名为的新列加入started_at
。这是一些示例数据,以及如何使用两个可能的表的子查询/联合来实现查询,我可以从中获取数据:
CREATE TABLE users (
id INTEGER,
first_name TEXT,
last_name TEXT
);
INSERT INTO users (id, first_name, last_name)
VALUES
(1, 'Craig', 'Smith'),
(2, 'Bill', 'Nye'),
(3, 'Bloop', 'Blop');
CREATE TABLE old_activity (
id INTEGER,
user_id INTEGER,
firm_id INTEGER,
amount INTEGER,
created_at DATE
);
INSERT INTO old_activity (id, user_id, firm_id, amount, created_at)
VALUES
(1, 1, 3, 5.24, '2019-04-29'),
(2, 2, 7, 4, '2019-03-28'),
(3, 3, 4, 6.99, '2019-04-28');
CREATE TABLE new_activity (
id INTEGER,
user_id INTEGER,
firm_id INTEGER,
plays INTEGER,
saves INTEGER,
created_at DATE
);
INSERT INTO new_activity (id, user_id, firm_id, plays, saves, created_at)
VALUES
(1, 1, 3, 10, 1, '2019-04-27'),
(2, 2, 3, 12, 2, '2019-03-29'),
(3, 3, 3, 6, 3, '2019-04-27');
CREATE TABLE firms (
id INTEGER,
name TEXT
);
INSERT INTO firms (id, name)
VALUES
(1, 'apple'),
(2, 'banana'),
(3, 'orange');
select
id,
first_name,
last_name,
(select created_at from old_activity
where user_id = users.id
union
select created_at from new_activity
where user_id = users.id
order by created_at asc
limit 1) as started_at
from users
查询应该只返回两个表created_at
之一中特定用户的最旧的。activity
我怎样才能通过加入来实现这一目标?对此的任何帮助将不胜感激。
解决方案
嗯。. . 你总是可以使用窗口函数:
select u.*, a.*
from users u left join
(select a.*,
row_number() over (partition by a.user_id order by a.created_at desc) as seqnum
from ((select oa.* from old_activity oa) union all
(select na.* from new_activity na)
) a
) a
on a.user_id = a.id and a.seqnum = 1
推荐阅读
- angular - 将 FormArray 动态添加到 FormGroup
- ios - 如何在 NSManagedObject 的 Child 类中创建 let 属性
- angular - Angular Test failed 无法绑定到“header”,因为它不是“app-previewer”的已知属性
- office365 - XML 架构冲突 Office 加载项清单
- jquery - 具有两个不同属性的复选框切换
- android - 尝试发布到 GooglePlay appStore 会出现错误 403
- ajax - Laravel AJAX 调用响应被重定向到登录页面
- sql - Rails 电子商务关系
- c# - SSIS - 实体框架 - {Model}.resource.dll 丢失
- javascript - 谁能告诉我为什么 8>7<6 = true?