sql - 查找类别交集的最新条目

标签 sql mysql date

我知道有很多“如何找到最新记录”的问题,但没有一个能完全解决我的特定问题:在 MySQL 中,我试图找到条目的最新记录映射到同一个表中的两个不同类别。本质上有一个包含大量信息的 ENTRIES 表、一个 CATEGORIES 表(id​​、name)和一个 ENTRY_CATEGORIES 表(entry_id、category_id)。我需要找到映射到两个不同类别的最新记录。我已经设法做到了这一点,但只是通过本质上加入派生表本身,感觉有一种更干净的方法来做到这一点。我怎样才能更好地表达以下困惑:

SELECT doc.entry_id
FROM exp_category_posts doc 
INNER JOIN exp_category_posts fund ON doc.entry_id = fund.entry_id 
INNER JOIN exp_weblog_titles t ON doc.entry_id = t.entry_id
WHERE doc.cat_id = 408 
AND fund.cat_id = 548 
AND t.entry_date = (SELECT MAX(t.entry_date)
FROM exp_category_posts doc 
INNER JOIN exp_category_posts fund ON doc.entry_id = fund.entry_id 
INNER JOIN exp_weblog_titles t ON doc.entry_id = t.entry_id
WHERE doc.cat_id = 408 
AND fund.cat_id = 548)

这是一个硬编码示例,其中 408 和 548 通常也是字段。如果您好奇的话,这是一个表达式引擎数据库。

最佳答案

您可以尝试更换

AND t.entry_date = (SELECT MAX(t.entry_date)
FROM exp_category_posts doc 
INNER JOIN exp_category_posts fund ON doc.entry_id = fund.entry_id 
INNER JOIN exp_weblog_titles t ON doc.entry_id = t.entry_id
WHERE doc.cat_id = 408 
AND fund.cat_id = 548)

与:

ORDER BY t.entry_date DESC
LIMIT 1

优化器最终可能会得到类似的查询(当然,这不能保证,但很有可能),但查询的长度只有一半。您必须运行 explain 并分析一些 select 查询,看看它的性能是否一样好或更好。

关于sql - 查找类别交集的最新条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1603944/

相关文章:

c# - 捕捉零行已更新

mysql - 另一张用于仓库或任何其他标准的 table

mysql - 如何编写包含连接、更新和排序依据的查询?

javascript - PHP 检查日期是否在两个日期之间

java - grails中转换日期错误

php - 用户日期范围输入与 MySQL 中的一系列日期范围相比较

sql - 由于 LEFT JOIN 或子查询,无法在 View 上创建 CLUSTERED INDEX

mysql - osticket如何通过表单输入值获取票证ID?

C# - MySQL 阻止 TINYINT(1) 到 bool 值的转换

mysql - 在mysql中创建一个表作为另一个表