查找类别交集的最新条目

时间:2009-10-21 22:08:50

标签: 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通常也是字段。如果你很好奇,这是一个Expression Engine数据库。

1 个答案:

答案 0 :(得分:1)

您可以尝试替换

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个查询,以查看它是否表现得更好。

相关问题