Du skal tilmelde dig post_meta
bord to gange. Her er noget databaseteori.
Når du forbinder tabeller, er der i teorien oprettet og filtreret en midlertidig tabel alle elementerne fra den første tabel kombineret med alle elementerne fra den anden tabel. Så hvis du for eksempel kun har 1 meta-element pr. indlæg, og du har 3 indlæg, så har du
+-------+----------+
|post_id|post_title|
+-------+----------+
| 1 | 'Post 1' |
| 2 | 'Post 2' |
| 3 | 'Post 3' |
+-------+----------+
og
+-------+----------+----------+------------+
|meta_id| post_id | meta_key | meta_value |
+-------+----------+----------+------------+
| 10 | 1 | k1 | v1 |
| 11 | 2 | k1 | v2 |
| 12 | 3 | k1 | v3 |
+-------+----------+----------+------------+
Og den "teoretiske" midlertidigt sammenføjede tabel er:
+---------+------------+----------+----------+-----------+-------------+
|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 |
+---------+------------+----------+----------+-----------+-------------+
Du siger så:HVOR p.id =pm.post_id
og dette filtrerer den midlertidige tabel til at være:
+---------+------------+----------+----------+-----------+-------------+
|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 |
+---------+------------+----------+----------+-----------+-------------+
Så du har kun én række for hvert indlæg + metaværdi. Din forespørgsel beder om rækker, der både har meta_key = category
og meta_key =boggenre`, som ikke eksisterer.
Så du har brug for en tabel, der forbinder postmeta
tabel i TO GANGE.
Du kan gøre dette ved at aliasere tabellen, når du slutter dig til dem. Tilgiv mig for at forenkle:
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
Her har du to sammenlagte kopier af postmeta-tabellen kaldet pm1
og pm2
(da de ikke BEGGE kan kaldes wp_postmeta
i forespørgslen.
Du kan derefter bede om:
AND pm1.meta_key = 'category'
AND pm1.meta_value = X
AND pm2.meta_key = 'book_genre'
AND pm2.meta_key IN (123,456)
Forhåbentlig kan du sy resten af det sammen.
Jeg tror også, du kan gøre dette med WP_Query, hvis du vil gå den vej.