我知道有很多“如何找到最新记录”的问题,但没有一个能完全解决我的特定问题:在 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/