2012-08-24 56 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;