Как связываются таблицы базы данных WordPress?

Ссылка скопирована
1 ответ

Как связываются таблицы базы данных WordPress?
Посмотрел в PhpMyAdmin таблицы базы данных WordPress сайта, и например таблицы Posts и Users
как бы не имею связей. Там где Ограничения внешнего ключа, обычно отображаются связи между таблицами, если есть такие связи. Но ведь эти таблицы по любому как-то связаны между собой. Т.к. у постов есть автор. Как тогда они связаны?

Как связываются таблицы базы данных WordPress?

Дополнительно:

Как связываются таблицы базы данных WordPress?

Через 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, в котором у юзера был бы список его постов..

    Как связываются таблицы базы данных WordPress?

    Как связываются таблицы базы данных WordPress?

  • Михаил,
    SELECT * FROM wp_posts WHERE post_author = {ID юзера}
  • Михаил, чтобы получить посты не нужно лазить в БД. И вообще почти никогда этого не нужно (и даже опасно) делать. Особенно так, как показал Fourgotten
  • Refguser, может ему не надо это на фронт/бэк. А так, что-то проверить и тп
  • yarovikov, по упоминаю в вопросе rest-api и другого вопроса видно что ТСу нужно. И он пошел не верным путём.

Ответы:

Всё описано в документации. И даже с картинками.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Ольга Сеть Ответ

В 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.IDwp_postmeta.post_id: произвольные поля записи;
  • wp_users.IDwp_usermeta.user_id: метаданные пользователя;
  • wp_posts.IDwp_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;

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 и проверять связи на уровне кода.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно