/ / Komplikovaný dotaz MySQL pre Wordpress - mysql

Komplexné MySQL dotaz pre Wordpress - mysql

Niekedy si myslím, že nemám mozgovú silu na programovanie, len to nemôžem dostať okolo mojej hlavy.

Mám stôl s názvom wp_postmeta, ktorý vyzerá asi takto

+-----------+-----------+------------+--------------+
|  meta_id  |  post_id  |  meta_key  |  meta_value  |
+-----------+-----------+------------+--------------+
|    1      |     1     |   type     |   movie      |
+-----------+-----------+------------+--------------+
|    2      |     1     |   name     |  dark knight |
+-----------+-----------+------------+--------------+
|    3      |     2     |    type    |   tv show    |
+-----------+-----------+------------+--------------+
|    4      |     2     |    name    |   lost       |
+-----------+-----------+------------+--------------+
|    5      |     3     |    type    |   tv show    |
+-----------+-----------+------------+--------------+
|    6      |     3     |   name     |  house       |
+-----------+-----------+------------+--------------+
|    7      |     4     |   type     |   movie      |
+-----------+-----------+------------+--------------+
|    8      |     4     |   name     |  godfather   |
+-----------+-----------+------------+--------------+

Čo chcem urobiť, je vybrať všetky filmy. Musím nájsť KDE meta_key = "typ" AND meta_value = "film", potom získajte názov "meta_key", kde sa zhoduje post_id a vyberte meta_hodnotu, čím mi dáte "temného rytiera" a "kmotra".

Ospravedlňujeme sa za zlé vysvetlenie, ale WordPress nemá logickú štruktúru k tejto časti databázy, čo sťažuje jej vysvetlenie.

odpovede:

3 pre odpoveď č. 1
select pm2.meta_value as movie_name
from wp_postmeta as pm1 join wp_postmeta as pm2
on pm1.post_id = pm2.post_id
where pm1.meta_key = "type" and pm1.meta_value = "movie" and
pm2.meta_key = "name"

0 pre odpoveď č. 2
SELECT b.meta_value as movie
FROM wp_postmeta a
LEFT JOIN wp_postmeta b ON (a.post_id = b.post_id)
WHERE a.meta_key = "type"
AND a.meta_value = "movie"
AND b.meta_key = "name";

0 pre odpoveď č. 3

Tu je mierny variant Amyamov, kde je spojenie implicitné. Naučil som sa to tak dávno, takže je to pravdepodobne staromódny spôsob:

select pm2.meta_value as movie_name
from wp_postmeta pm1, wp_postmeta pm2
where pm1.post_id = pm2.post_id AND
pm1.meta_key = "type" AND pm1.meta_value = "movie" AND
pm2.meta_key = "name";

0 pre odpoveď č. 4
SELECT meta_value FROM wp_postmeta WHERE meta_key = "name" AND post_id IN
(SELECT post_id FROM wp_postmeta
WHERE meta_key  = "type" AND meta_value = "movie");