mysql - 如何从两个不同的、不相关的表中获取最新行,并将它们合并到一个结果集中?

标签 mysql database

我有两个不同的表,其架构如下:

表1:

COLUMN_NAME     COLUMN_TYPE

campaign_id     varchar(50)
subscriber_id   varchar(50)
message         varchar(21000)
log_time        datetime
log_type        varchar(50)
level           varchar(50)
campaign_name   varchar(500)

表2:

COLUMN_NAME      COLUMN_TYPE

guid             varchar(100)
sid              varchar(100)
url              varchar(2500)
ip               varchar(20)
is_new           varchar(20)
ref              varchar(2500)
user_agent       varchar(255)
stats_time       datetime
country          varchar(50)
region           varchar(50)
city             varchar(50)
city_lat_long    varchar(50)
email            varchar(100)

我需要一个表,它是这两个表(不是所有列)的合并,并且行应根据时间排序(即表1中的log_time和表2中的stats_time)。这两个表之间没有关系。

我需要从 Table1 中获取的列是

campaign_id
subscriber_id
message
log_time
log_type
campaign_name

表2中我需要的列是:

url
stats_time
email

我可以获得更优化的解决方案吗?

查询:

SELECT url, ip, stats_time, email, campaign_id, subscriber_id, campaign_name, log_time, log_type, time from
(  
( SELECT url,ip,stats_time,email,NULL AS campaign_id,NULL AS subscriber_id ,NULL AS campaign_name,NULL AS log_time,NULL AS log_type, NULL AS message, UNIX_TIMESTAMP(stats_time) AS time FROM Tabel2 AS Table2Alias WHERE URL !='' AND EMAIL != '') Order by stats_time desc Limit 100

UNION ALL  

( SELECT NULL AS url,NULL AS ip,NULL AS stats_time,NULL AS email,campaign_id,subscriber_id,campaign_name,log_time,log_type,message,UNIX_TIMESTAMP(log_time) AS time FROM Table1 AS Table1Alias WHERE (log_type='x1' OR log_type='x2' OR log_type='x3' OR log_type='x4') order by log_time desc Limit 100)
)
as ResultTable order by time  desc

最佳答案

从每个表中选择顶部的Limit + Offset 记录,对结果进行 UNION,然后从 UNION 中进行选择。

因此,如果用户正在查看第 5 页,并且每页有 20 个项目,您将从每个表中选择前 100 个项目,执行 UNION,然后从结果中选择 20 条记录。

关于mysql - 如何从两个不同的、不相关的表中获取最新行,并将它们合并到一个结果集中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28110102/

相关文章:

mysql - 选择给定 start_datetime 和 end_datetime 的所有行

database - 是否可以实时自动从 elasticsearch 中删除早于例如 10 天的数据?

java - 在java中使用多个数据库连接的有效方法

java - 将java连接到mysql域服务器

javascript - 如何使用数据库连接运行 Mongo JS Shell 脚本

mysql - MariaDB 用户过程无限循环

php - 从 html 表单错误读取输入

mysql - Xampp连接mysql时出错

mysql - 如何使用 ASCII 查询 mysql utf-8 表

java - Junit 测试后的数据库清理