1

wp_posts.IDと wp_icl_translations.tridで互いに関連するwp_postswp_icl_translationsテーブルがあります。すでに翻訳されている投稿をすべて除外したい。次のクエリは、実際に除外したいすべての行を取得しています。

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;
4

3 に答える 3

1

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;
于 2012-08-24T08:55:44.620 に答える
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;  
于 2012-08-24T08:57:51.137 に答える
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;
于 2012-08-24T08:54:51.957 に答える