Czasami myślę, że nie mam siły do programowania, po prostu nie mogę tego zrozumieć.
Mam tabelę o nazwie wp_postmeta, która wygląda trochę tak
+-----------+-----------+------------+--------------+
| 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 |
+-----------+-----------+------------+--------------+
Chcę tylko wybrać wszystkie filmy. Muszę znaleźć GDZIE meta_key
= "typ" AND meta_value
= "film", następnie pobierz meta_key "name", gdzie dopasowanie post_id i wybierz meta_value dając mi "dark knight" i "godfather".
Przepraszamy za kiepskie wyjaśnienie, ale WordPress nie ma logicznej struktury do tej części bazy danych, co sprawia, że jest to dość trudne do wyjaśnienia.
Odpowiedzi:
3 dla odpowiedzi № 1select 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 dla odpowiedzi nr 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 dla odpowiedzi № 3
Oto niewielki wariant Amyam, w którym łączenie jest niejawne. Nauczyłem się tego w ten sposób dawno temu, więc jest to prawdopodobnie staroświecki sposób:
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 dla odpowiedzi nr 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");