2016-08-12 50 views
0

我已经得到了以下(简化了这个问题)表中的DB:的MySQL排除记录得到的记录数

  • article(ID,标题,文字,AUTHOR_ID等)
  • publication(ID,article_id的,publication_place,日期)

我想找到发表在由特定作者的最后X个月的文章数量,但只有当他们没有公布较早的任何地方。

目前我已经有了:

SELECT COUNT(DISTINCT article.id) AS articlecount 
FROM article 
LEFT JOIN publication ON publication.article_id=article.id 
WHERE author_id = :authorID 
AND publication.date >= :date 
LIMIT 1 

...它基本上选择:date后发表的文章,但不排除其也早些时候发表的文章。有没有增加子选择(AND article.id NOT IN ...)可以提高查询执行时间?

回答

1

你可以做一样AND article.id NOT IN ...再选择用左连接:

SELECT COUNT(DISTINCT article.id) AS articlecount 
FROM article a 
JOIN publication p_new ON p_new.article_id=a.id 
LEFT JOIN publication p_old ON p_old.article_id=a.id AND p_old.date < :date 
WHERE a.author_id = :authorID 
AND p_new.date >= :date 
AND p_old.id IS NULL 
+0

我必须考虑它是怎么工作的,但它似乎工作! :) 谢谢。 – b174008