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

Също така не съхранявайте масив от идентификационни номера в един ред, вместо това да преминете през масива от идентификационни номера и нормализирайте вашите данни за харесвания ръчно Не сериализирайте данни в поле на база данни. Това е, което Database_normalization е за и вмъкнете всеки идентификатор в нов ред, защото

$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 имат таксономията на категорията, както и идентификатора на категорията

Ето частта, която покрива

1. категория (включване и изключване)

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

2. игнорирайте публикации по масив от идентификатории

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Python, MySQL и SELECT извеждат в речник с имена на колони за ключове

  2. Как да изберете максимум 3 елемента на потребител в MySQL?

  3. Конкатениране на низ и число в MySQL

  4. LocalDateTime , ZonedDateTime и Timestamp

  5. Защо засегнатите редове връщат 0 при успешно актуализиране/изтриване?