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_relationships
và wp_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).")