Поисковая система MySQL все еще не получает правильные отношения для нескольких таблиц - PullRequest
0 голосов
/ 07 декабря 2011

Следующий запрос SQL в PHP должен отображать результаты на основе записей заголовка и тега. Теги находятся в таблице wp_terms и сообщениях в wp_posts. В середине у нас есть wp_term_relationships, чтобы связать все.

В wp_posts поле, которое мы хотим, это post_id В wp_term_relationships поле object_id должно соответствовать идентификатору записи, а term_taxonomy_id должно соответствовать term_id. В wp_terms term_id должно соответствовать term_taxonomy_id в wp_terms_relationships. Затем нам нужно поле из wp_terms, которое называется name для целей поиска.

На данный момент этот код не включает термины в поиске.

SELECT ID, post_name, post_title, post_date 
FROM wp_posts
JOIN wp_term_relationships 
ON        object_id = wp_posts.id
LEFT JOIN wp_terms 
ON        term_id = wp_term_relationships.term_taxonomy_id 

WHERE 
wp_posts.post_type = 'post' AND wp_posts.post_status = 'publish' 
AND (wp_posts.post_title LIKE '%$my_text%' OR wp_terms.name LIKE '%$my_text%')"

Как нам заставить это работать.

UPDATE

Что должно произойти, так это то, что поиск должен возвращать результаты, основанные на заголовке или теге записи. Проблема в том, что теги post считаются терминами и помогают в другой таблице, для которой требуется треть, чтобы найти соответствующий идентификатор.

Я попытаюсь нанести на карту соответствующий, но.

TABLE:  wp_posts

==================================================================
    post_id       ====     post_title
==================================================================

TABLE wp_terms

==================================================================
        term_id       ====     name
==================================================================

TABLE wp_term_relationships

==================================================================
        object_id       ====     term_taxonomy_id
==================================================================

Итак, мы используем wp_term_relationships, чтобы узнать, какие идентификаторы терминов (term_taxonomy_id) отражают, какие сообщения (object_id);

Надеюсь, это поможет

Изображение структуры таблицы

enter image description here

1 Ответ

0 голосов
/ 07 декабря 2011

Я не уверен, что правильно понял вопрос, но если вы хотите получить название связанных терминов, то это будет работать:

$query = 
 "SELECT DISTINCT ID, post_name, post_title, post_date
  FROM wp_posts 
  JOIN wp_term_relationships 
  ON object_id = wp_posts.id
  LEFT JOIN wp_terms 
  ON term_id = wp_term_relationships.term_taxonomy_id 
  WHERE 
  wp_posts.post_type = 'post' AND wp_posts.post_status = 'publish' 
  AND (wp_posts.post_title LIKE '%$my_text%' OR wp_terms.name LIKE '%$my_text%')";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...