2016-08-12 33 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