Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mảng truy vấn Meta trong WordPress

Hãy thử cái này với WP_Query không cần quan hệ chỉ cần sử dụng phần so sánh với 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);

HOẶC bằng get_posts hãy thử cái này

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

HOẶC bằng một truy vấn tùy chỉnh, bạn có thể thực hiện như sau

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

Cũng không lưu trữ mảng id trong một hàng thay vào đó lặp qua mảng id và chuẩn hóa dữ liệu lượt thích của bạn theo cách thủ công Không tuần tự hóa dữ liệu vào trường cơ sở dữ liệu. Đó là những gì Database_normalization là cho và chèn mỗi id trong hàng mới bởi vì

$likes = array(61, 62);

foerach($likes as $l){

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

}

Và dưới đây là truy vấn bạn đã yêu cầu trong nhận xét tiền thưởng

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

Tôi đã sử dụng INNER JOINs trên wp_term_relationshipswp_term_taxonomy bảng wp_term_relationships lưu trữ mối quan hệ của các bài đăng và phân loại của danh mục và bảng wp_term_taxonomy có phân loại của danh mục và cả id danh mục

Đây là phần bao gồm

1. danh mục (bao gồm và loại trừ)

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

2. bỏ qua các bài đăng theo một mảng ID

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. nodeJS trả về giá trị từ callback

  2. Nhận giá trị trước sau khi cập nhật - MySql

  3. đếm 10 giá trị xuất hiện nhiều nhất trong một cột trong mysql

  4. Làm thế nào để chạy cơ sở dữ liệu thử nghiệm của Django chỉ trong bộ nhớ?

  5. PHP không thấy tiện ích mở rộng mysql