Я пытаюсь обернуть голову вокруг запроса таблицы «Значение атрибута объекта», как вы находите в таблице WordPress postmeta
, которая содержит метаданные о сообщениях.Как вы запрашиваете различные отношения между таблицей «Значение атрибута объекта» и другой таблицей?
Обратите внимание, что я не запрашиваю базу данных из WordPress.
Так вот некоторые примеры данные из wp_postmeta
таблицы, которая показывает данные из двух разных событий, в том же _EventVenueID
:
+---------+---------+-------------------+---------------------+
| meta_id | post_id | meta_key | meta_value |
+---------+---------+-------------------+---------------------+
| 3914 | 422 | _EventStateDate | 2016-01-27 01:00:00 |
| 3915 | 422 | _EventEndDate | 2016-01-27 02:00:00 |
| 3400 | 422 | _EventVenueID | 333 |
| 3916 | 422 | _EventOrganizerID | 410 |
| 3917 | 423 | _EventStartDate | 2017-01-28 01:00:00 |
| 3918 | 423 | _EventEndDate | 2017-01-28 02:00:00 |
| 3401 | 423 | _EventVenueID | 333 |
| 3919 | 423 | _EventOrganizerID | 411 |
+---------+---------+-------------------+---------------------+
А вот некоторые примеры данные из усеченной версии wp_posts
таблицы:
+---------+------------+-----------------+-------------+
| ID | post_title | post_type | post_status |
+---------+------------+-----------------+-------------+
| 422 | Picnic | tribe_events | publish |
| 423 | Concert | tribe_events | publish |
| 411 | Bob Jones | tribe_organizer | publish |
| 410 | Mary Smith | tribe_organizer | publish |
| 333 | Park | tribe_venue | publish |
+---------+------------+-----------------+-------------+
Как вы можете видеть, существуют три вида сущностей: события, организаторы и места проведения. На каждом мероприятии может быть одно место и один или несколько организаторов. Также обратите внимание, что столбец wp_posts.ID
индексирует столбец wp_postmeta.post_id
, а также столбец wp_postmeta.meta_value
.
Так что, если я хочу, чтобы вытащить данные события для конкретного места (в данном случае, парк), я могу сделать это с этим запросом:
SELECT pm1.meta_value AS _EventVenueID,
p.post_title,
pm2.meta_value AS _EventStartDate,
pm3.meta_value AS _EventEndDate,
pm4.meta_value AS _EventOrganizerID
FROM wp_posts p
LEFT JOIN wp_postmeta AS pm1 ON (p.ID = pm1.post_id AND pm1.meta_key='_EventVenueID')
LEFT JOIN wp_postmeta AS pm2 ON (p.ID = pm2.post_id AND pm2.meta_key='_EventStartDate')
LEFT JOIN wp_postmeta AS pm3 ON (p.ID = pm3.post_id AND pm3.meta_key='_EventEndDate')
LEFT JOIN wp_postmeta AS pm4 ON (p.ID = pm4.post_id AND pm4.meta_key='_EventOrganizerID')
WHERE p.post_type = 'tribe_events' AND p.post_status = 'publish'
HAVING _EventVenueID = 333
Теперь, скажем, я хочу, чтобы выбрать имя организатора в качестве столбца тоже. Итак, другими словами, я хочу связать _EventOrganizerId
в таблице wp_postmeta
с данными, находящимися в таблице wp_posts
, поэтому я также могу вытащить post_title
для организатора, связанного с событием.
Как это сделать?
UPDATE на вопрос о желаемом выходе в комментариях:
В настоящее время я получаю выход, как это на результате строки:
[
'333',
'Picnic',
'2016-01-27 01:00:00',
'2016-01-27 02:00:00',
'410'
],
То, что я хочу, чтобы получить то же самое, но с именем организатора, тоже:
[
'333',
'Picnic',
'2016-01-27 01:00:00',
'2016-01-27 02:00:00',
'410',
'Mary Smith'
],
Как бы выглядел желаемый результат? – Strawberry
См. Обновление в нижней части вопроса для вашего ответа @Strawberry – StevieD