sql >> データベース >  >> RDS >> Mysql

WordPressメタクエリ配列

    WP_Queryでこれを試してください 関係の必要はありません。INで比較部分を使用するだけです。

     $user_ids = array(60, 61, 62, 63);
     $args = array(
       'post_type' => 'post',
       'meta_key' => 'likes',
       'post_status'       => 'publish',
       'posts_per_page'    => -1,
       'orderby'           => 'rand',       
       'order' => 'ASC',
       'meta_query' => array(
           array(
               'key' => 'likes',
               'value' => $user_ids, //array
               'compare' => 'IN',
           )
       )
     );
     $query = new WP_Query($args);
    

    またはget_postsでこれを試してください

    $args = array(
        'post_type'         => 'post',
        'post_status'       => 'publish',
        'posts_per_page'    => -1,
        'orderby'           => 'rand',
        'meta_query'        => array(
    
            array(
                'key'       => 'likes',
                'value'     => $user_ids,
                'compare'   => 'IN'
            )
        )
    );
    $posts = get_posts($args);
    

    または、カスタムクエリを使用すると、次のように実行できます

    global $wpdb;
    
    $liked_posts=$wpdb->get_results("SELECT * FROM `wp_posts` WHERE 
    post_type='post' AND post_status ='publish' AND ID
     IN(
    SELECT post_id FROM `wp_postmeta` WHERE meta_key='likes' 
    AND meta_value IN (".join(',',$user_ids).")
    ) ORDER BY RAND()");
    

    また、IDの配列を1つの行に格納せず、代わりにIDの配列をループして正規化します 好きなデータを手動でデータベースフィールドにシリアル化しないでください。それが Database_normalization

    のため、新しい行に各IDを挿入します。
    $likes = array(61, 62);
    
    foerach($likes as $l){
    
    update_post_meta($post->ID, "likes", $l);
    
    }
    

    そして、以下はあなたが報奨金のコメントで求めた質問です

    $liked_posts=$wpdb->get_results("
    SELECT * FROM `wp_posts` wp
    INNER JOIN `wp_term_relationships` wtr ON (wp.`ID`=wtr.`object_id`)
    INNER JOIN  `wp_term_taxonomy` wtt ON (wtr.`term_taxonomy_id` =wtt.`term_taxonomy_id`)
    WHERE  wp.post_type='post' AND wp.post_status ='publish' AND wp.ID
     IN(
    SELECT post_id FROM `wp_postmeta` WHERE meta_key='likes' 
    AND meta_value IN (".join(',',$user_ids).")
    )  AND wp.ID NOT IN (100,101,102)
    AND wtt.`term_id` IN(1,2,3) AND wtt.`term_id` NOT IN (4,5,6,)    
    ORDER BY RAND() ");
    

    INNER JOINsを使用しました wp_term_relationshipsで およびwp_term_taxonomy テーブルwp_term_relationships 投稿の関係とカテゴリの分類法およびテーブルwp_term_taxonomyを格納します カテゴリの分類法とカテゴリIDを持っている

    これが

    をカバーする部分です

    1。カテゴリ(含めるおよび除外する)

    AND wtt.`term_id` IN(1,2,3) AND wtt.`term_id` NOT IN (4,5,6,) 
    

    2。 IDの配列による投稿を無視する

    AND wp.ID NOT IN (100,101,102) 
    or $postids =array(100,101,102);
    AND wp.ID NOT IN (".join(',',$postids).")
    


    1. PostgreSQL:全文検索-部分的な単語を検索する方法は?

    2. 多言語データを保持するための最良のデータベース構造は何ですか?

    3. Oracleセッションの日付形式を確認する方法

    4. html<複数を選択=複数>+SQLクエリ検索