web-dev-qa-db-ja.com

カテゴリを示していないすべてのレコードを取得するためのSQLクエリ

カテゴリ(分類法 "category")が指定されていないID投稿を取得する必要があります。ポストは他の分類法を含みます。

私はコードから投稿を得ます:

$posts = $wpdb->get_results('SELECT ...', , ARRAY_A);

私の質問は希望の録音タイプを選択する

SELECT distinct posts.ID FROM wp_posts AS posts 

LEFT JOIN wp_term_relationships AS cat_link ON
cat_link.object_id = posts.ID 

LEFT JOIN wp_term_taxonomy AS cat_tax ON
cat_link.term_taxonomy_id = cat_tax.term_taxonomy_id AND cat_tax.taxonomy NOT IN ('category') 

WHERE post_type = 'popular_music' AND post_status = 'publish' ORDER BY posts.ID DESC

しかし、それは考慮されていません:

cat_link.term_taxonomy_id = cat_tax.term_taxonomy_id AND cat_tax.taxonomy NOT IN ('category')

未分類のレコードを選択する方法

1
TrubinE

私が質問を理解したならば、あなたは同等のSQLを探しています。

$args = array (
    'post_type' => 'popular_music',
    'post_status' => 'publish',
    'tax_query' => array (
        array (
            'taxonomy' => 'category',
            'operator' => 'NOT EXISTS',
            ),
        ),
    'posts_per_page' => -1,
    'orderby' => 'ID',
    'order' => 'DESC',
    ) ;
$query = new WP_Query ($args) ;
echo $query->request ;

もしそうなら、これはWP_Queryが生成するSQLです。

SELECT SQL_CALC_FOUND_ROWS $wpdb->posts.ID
FROM
    $wpdb->posts
WHERE
    1=1 AND
    ( 
        NOT EXISTS
        (
            SELECT 1
            FROM
                $wpdb->term_relationships INNER JOIN
                $wpdb->term_taxonomy ON $wpdb->term_taxonomy.term_taxonomy_id = $wpdb->term_relationships.term_taxonomy_id
            WHERE
                $wpdb->term_taxonomy.taxonomy = 'category' AND
                $wpdb->term_relationships.object_id = $wpdb->posts.ID
        )
    ) AND
    $wpdb->posts.post_type = 'popular_music' AND
    (($wpdb->posts.post_status = 'publish'))
GROUP BY $wpdb->posts.ID
ORDER BY $wpdb->posts.ID DESC

あなたがしているSQLはこれに似たものです:

SELECT *
FROM wp_posts AS posts
    LEFT JOIN wp_term_relationships 
        AS cat_link
        ON cat_link.object_id = posts.ID
    LEFT JOIN wp_term_taxonomy
        AS cat_tax
        ON cat_tax.term_taxonomy_id = cat_link.term_taxonomy_id
        AND cat_tax.taxonomy = 'category'
WHERE post_type = 'post'
AND post_status = 'publish'
AND cat_link.object_id IS NULL
0
PSD to Final