Как связываются таблицы базы данных WordPress?
Как связываются таблицы базы данных WordPress?
Посмотрел в PhpMyAdmin таблицы базы данных WordPress сайта, и например таблицы Posts и Users
как бы не имею связей. Там где Ограничения внешнего ключа, обычно отображаются связи между таблицами, если есть такие связи. Но ведь эти таблицы по любому как-то связаны между собой. Т.к. у постов есть автор. Как тогда они связаны?
Дополнительно:
Через id:
- Поле post_author в таблице wp_posts содержит id пользователя, который является автором поста.
- Поле user_id в таблице wp_usermeta содержит id пользователя, которому принадлежат метаданные.
- Поле comment_post_ID в таблице wp_comments содержит id поста, к которому относится комментарий.
Через промежуточные таблицы:
- Таблица wp_term_relationships связывает записи с категориями и тегами.
- Таблица wp_postmeta хранит метаданные для записей и других объектов.
Например, связь между постом и его автором:
- Поле post_author в таблице wp_posts содержит id пользователя, который является автором поста.
- id пользователя можно использовать для поиска записи в таблице wp_users, чтобы получить информацию о нем.
phpmyadmin:
- Ограничения внешнего ключа отображаются только для связей, реализованных с помощью внешних ключей.
- Другие связи можно увидеть, используя другие инструменты, например, плагин Adminer.
- А могу я как-то получить посты определенного юзера?
Я вот например по АПИ смотрю, у постов есть информация об авторе.
А у юзеров нет информации об их постах.
А мне бы получить такой JSON, в котором у юзера был бы список его постов..
- Михаил,
SELECT * FROM wp_posts WHERE post_author = {ID юзера} - Михаил, чтобы получить посты не нужно лазить в БД. И вообще почти никогда этого не нужно (и даже опасно) делать. Особенно так, как показал Fourgotten
- Refguser, может ему не надо это на фронт/бэк. А так, что-то проверить и тп
- yarovikov, по упоминаю в вопросе rest-api и другого вопроса видно что ТСу нужно. И он пошел не верным путём.
Ответы:
Всё описано в документации. И даже с картинками.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос




В WordPress таблицы связаны не внешними ключами MySQL, а логически через ID. Поэтому в phpMyAdmin Вы не видите “Constraints” между
wp_postsиwp_users. Это нормальное поведение WordPress, а не ошибка базы.Например, автор записи хранится так: в таблице
wp_postsесть полеpost_author. В нём лежит ID пользователя из таблицыwp_users.ID. MySQL не запрещает удалить пользователя, на которого ссылается запись, потому что формального foreign key нет, но сам WordPress на уровне PHP работает с этой связью.Основные связи такие:
wp_posts.ID→wp_postmeta.post_id: произвольные поля записи;wp_users.ID→wp_usermeta.user_id: метаданные пользователя;wp_posts.ID→wp_comments.comment_post_ID: комментарии к записи;wp_terms,wp_term_taxonomy,wp_term_relationships: категории, метки и связи записей с терминами.Пример запроса, который показывает запись и автора:
SELECT p.ID, p.post_title, u.user_login FROM wp_posts p LEFT JOIN wp_users u ON u.ID = p.post_author WHERE p.post_type = 'post' LIMIT 10;
Почему WordPress не использует foreign key? Исторически он должен был работать на разных версиях MySQL, с разными движками таблиц и на дешёвых хостингах. Кроме того, плагины часто добавляют свои типы записей, метаполя и связи, и жёсткие ограничения на уровне БД усложнили бы совместимость.
Если нужно разбираться в структуре, смотрите не “Constraints”, а значения ID и JOIN-запросы. Для своих таблиц в плагине foreign key использовать можно, но для стандартных таблиц WordPress лучше придерживаться его логики: хранить ID и проверять связи на уровне кода.