полнотекстовый поиск не возвращает общее количество - PullRequest
1 голос
/ 03 марта 2012

Нуждайтесь в помощи, пожалуйста, помогите!

Я выполняю полнотекстовый поиск с помощью mysql.Мои данные хранятся в двух таблицах, поэтому я должен выполнить отдельные сопоставления для каждой таблицы и добавить релевантность вместе, как вы можете видеть в моем операторе MySQL.

Проблема в том, что я пытаюсь получить СЧЕТ для всех сообщений, которые есть в моей таблице сообщений.Однако это возвращается мне, только когда совпадение найдено в таблице вопросов, а не найдено ли совпадение в таблице сообщений?Есть идеи почему?

Скажите, пожалуйста, в дополнительной информации не требуется.Спасибо,

SELECT questions. * , 
     posts.post, 
     COUNT(posts.post) -1 AS total_answers, 
     posts.votes, 
     posts.id AS post_id, 
     posts.created, 
     users.id AS user_id, 
     users.username, 
     users.rep, 
     MATCH (questions.title) AGAINST ( '{$keywords}') AS title_relevance,
     MATCH (posts.post) AGAINST ( '{$keywords}') AS post_relevance
FROM questions
     LEFT JOIN posts ON questions.id = posts.question_id
     LEFT JOIN users ON questions.user_id = users.id
WHERE MATCH (questions.title) AGAINST ( '{$keywords}')
    OR MATCH (posts.post) AGAINST ( '{$keywords}')
GROUP BY questions.id
ORDER BY (title_relevance + post_relevance) DESC

Нашли ответ.

SELECT questions. * , posts.post, posts.question_id AS QID, (

SELECT COUNT( posts.post ) 
FROM posts
WHERE question_id = QID
) AS total_answers, posts.votes, posts.id AS post_id, posts.created, users.id AS     user_id, users.username, users.rep, 
MATCH (
questions.title
)
AGAINST (
'humans'
) AS title_relevance, 
MATCH (
posts.post
)
AGAINST (
'humans'
) AS post_relevance
FROM questions
LEFT JOIN posts ON questions.id = posts.question_id
LEFT JOIN users ON questions.user_id = users.id
WHERE MATCH (
questions.title
)
AGAINST (
'humans'
)
OR MATCH (
posts.post
)
AGAINST (
'humans'
)
GROUP BY questions.id
ORDER BY (
title_relevance + post_relevance
) DESC 
LIMIT 0 , 30

1 Ответ

0 голосов
/ 03 марта 2012

Убедитесь, что для каждой таблицы создан полнотекстовый индекс.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...