2012-08-24 53 views
1

我有一個wp_postswp_icl_translations表什麼都跟對方wp_posts.IDwp_icl_translations.trid。我想排除那些已經有翻譯的帖子。 以下查詢將檢索我實際想要排除的所有這些行。的MySQL排除查詢

SELECT p.ID, 
     p.post_title 
FROM wp_posts AS p 
      JOIN wp_icl_translations AS t 
      ON p.ID= t.trid 
WHERE p.post_type = '{$type}' AND 
     p.post_status = 'publish' AND 
     t.language_code='en' AND 
     t.element_type='post_post' 
ORDER BY post_title; 
+0

你有'LEFT JOIN'嘗試。我們定義哪一列已經完成了轉換? – diEcho

+0

嗨,謝謝你的反饋t.language_code = en – lgt

回答

0

嘗試(未測試)

使用NOT <>條件

SELECT p.ID,p.post_title 
FROM wp_posts AS p 
INNER JOIN wp_icl_translations AS t 
      ON p.ID= t.trid 
WHERE p.post_type = '{$type}' AND 
     p.post_status = 'publish' AND 
     t.language_code <>'en' AND 
     t.element_type='post_post' 
ORDER BY post_title; 

LEFT JOINIS NULL

SELECT p.ID,p.post_title 
FROM wp_posts AS p 
LEFT JOIN wp_icl_translations AS t 
      ON p.ID= t.trid 
WHERE p.post_type = '{$type}' AND 
     p.post_status = 'publish' AND 
     t.trid IS NULL 
ORDER BY post_title; 
+1

't.trid IS NULL AND t.language_code <>'en'AND t.element_type ='post_post''永遠不會是真的。 – xdazz

+0

@xdazz。哦,是的。謝謝 – diEcho

1

ù se LEFT JOIN並選擇IS NULL

SELECT p.ID, 
     p.post_title 
FROM wp_posts AS p 
LEFT JOIN wp_icl_translations AS t ON p.ID= t.trid 
WHERE p.post_type = '{$type}' AND 
     p.post_status = 'publish' AND 
     t.trid IS NULL 
ORDER BY post_title; 
+0

我認爲只有'IS NULL'不會滿足OP。不是嗎? – diEcho

+0

謝謝,您的查詢正在返回我翻譯的帖子。我想要的是排除這些 – lgt

0

我會說這樣的話;使用(NOT)IN運算符。但是可能有更好的解決方案(這種性能不應該那麼好,也沒有經過測試)。

SELECT ID, 
     post_title 
FROM wp_posts 
WHERE ID NOT IN 
(
     SELECT p.ID 
     FROM wp_posts AS p 
     JOIN wp_icl_translations AS t 
     ON p.ID= t.trid 
     WHERE p.post_type = '{$type}' AND 
      p.post_status = 'publish' AND 
      t.language_code='en' AND 
      t.element_type='post_post' 

) 
ORDER BY post_title;