Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Dapatkan posting WP berdasarkan beberapa pasangan kunci/nilai meta menggunakan IN

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengatur zona waktu xampp mysql dan apache?

  2. Mesin Pencari seperti Google di PHP/mySQL

  3. Wildcard MySQL * dan %

  4. Cara menggunakan NHibernate dengan server MySQL dan server Microsoft SQL 2008

  5. ekstrak mysql tahun dari format tanggal