Anda harus bergabung dengan post_meta
meja dua kali. Berikut beberapa teori basis data.
Saat Anda bergabung dengan tabel, secara teori tabel sementara berisi semua item dari tabel pertama yang digabungkan dengan semua item dari tabel kedua dibuat dan difilter. Jadi jika, misalnya, Anda hanya memiliki 1 item meta per postingan, dan Anda memiliki 3 postingan, maka Anda memiliki
+-------+----------+
|post_id|post_title|
+-------+----------+
| 1 | 'Post 1' |
| 2 | 'Post 2' |
| 3 | 'Post 3' |
+-------+----------+
dan
+-------+----------+----------+------------+
|meta_id| post_id | meta_key | meta_value |
+-------+----------+----------+------------+
| 10 | 1 | k1 | v1 |
| 11 | 2 | k1 | v2 |
| 12 | 3 | k1 | v3 |
+-------+----------+----------+------------+
Dan tabel gabungan sementara "teoretis" adalah:
+---------+------------+----------+----------+-----------+-------------+
|p.post_id|p.post_title|pm.meta_id|pm.post_id|pm.meta_key|pm.meta_value|
+---------+------------+----------+----------+-----------+-------------+
| 1 | 'Post 1' | 10 | 1 | k1 | v1 |
| 1 | 'Post 1' | 11 | 2 | k1 | v2 |
| 1 | 'Post 1' | 12 | 3 | k1 | v3 |
| 2 | 'Post 2' | 10 | 1 | k1 | v1 |
| 2 | 'Post 2' | 11 | 2 | k1 | v2 |
| 2 | 'Post 2' | 12 | 3 | k1 | v3 |
| 3 | 'Post 3' | 10 | 1 | k1 | v1 |
| 3 | 'Post 3' | 11 | 2 | k1 | v2 |
| 3 | 'Post 3' | 12 | 3 | k1 | v3 |
+---------+------------+----------+----------+-----------+-------------+
Anda kemudian mengatakan:DI MANA p.id =pm.post_id
dan ini memfilter tabel sementara menjadi:
+---------+------------+----------+----------+-----------+-------------+
|p.post_id|p.post_title|pm.meta_id|pm.post_id|pm.meta_key|pm.meta_value|
+---------+------------+----------+----------+-----------+-------------+
| 1 | 'Post 1' | 10 | 1 | k1 | v1 |
| 2 | 'Post 2' | 11 | 2 | k1 | v2 |
| 3 | 'Post 3' | 12 | 3 | k1 | v3 |
+---------+------------+----------+----------+-----------+-------------+
Jadi Anda hanya memiliki satu baris untuk setiap posting + nilai meta. Kueri Anda meminta baris yang memiliki meta_key = category
dan meta_key =book_genre` yang tidak ada.
Jadi, Anda memerlukan tabel yang menggabungkan postmeta
tabel di DUA KALI.
Anda dapat melakukan ini dengan membuat alias tabel saat Anda bergabung dengan mereka. Maafkan saya karena menyederhanakan:
SELECT wp_posts.*, pm1.*, pm2.*
FROM
wp_posts
wp_postmeta as pm1
wp_postmeta as pm2
WHERE pm1.post_id = wp_posts.ID
AND pm2.post_id = wp_posts.ID
AND ...etc
Di sini Anda memiliki dua salinan tabel postmeta yang digabungkan dengan alias ke pm1
dan pm2
(karena keduanya tidak bisa disebut wp_postmeta
dalam kueri.
Anda kemudian dapat meminta:
AND pm1.meta_key = 'category'
AND pm1.meta_value = X
AND pm2.meta_key = 'book_genre'
AND pm2.meta_key IN (123,456)
Semoga Anda bisa menyatukan sisanya dari itu.
Saya juga berpikir Anda dapat melakukan ini dengan WP_Query jika Anda ingin menempuh rute itu.