sql >> Database >  >> RDS >> Mysql

WordPress Meta Query-arrays

Probeer deze eens met WP_Query geen relatie nodig, gebruik gewoon het vergelijkingsgedeelte met 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);

OF door get_posts probeer dit

$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);

OF door een aangepaste zoekopdracht kunt u als volgt doen

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()");

Sla ook geen reeks id's in één rij op, maar loop door de reeks id's en normaliseer je houdt van gegevens handmatig Geef geen serialisatie van gegevens in een databaseveld. Dat is wat Database_normalization is voor en voeg elke id in een nieuwe rij in omdat

$likes = array(61, 62);

foerach($likes as $l){

update_post_meta($post->ID, "likes", $l);

}

En hieronder is de vraag waar je om hebt gevraagd in bounty-opmerkingen

$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() ");

Ik heb de INNER JOINs . gebruikt op wp_term_relationships en wp_term_taxonomy de tabel wp_term_relationships slaat de relatie op van berichten en de taxonomie van categorie en de tabel wp_term_taxonomy hebben de taxonomie van de categorie en ook de categorie-ID

Hier is het deel dat de

. omvat

1. categorie (opnemen en uitsluiten)

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

2. negeer berichten met een reeks ID's

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


  1. Oracle:CSV-bestand importeren

  2. SQL-query ten minste één van iets

  3. validatielink via e-mail

  4. Mysql:onmogelijk waar opgemerkt na het lezen van const-tabellen