Полнотекстовый поиск в более чем 2 таблицах с разными данными - PullRequest
0 голосов
/ 12 июля 2011

Привет, у меня есть заявление sql

SELECT *,  MATCH (first_name,last_name) AGAINST ('*?*' IN BOOLEAN MODE) AS score, MATCH (groups.groupname) AGAINST ('*?*' IN BOOLEAN MODE) AS sscore
FROM users INNER JOIN groups  
WHERE MATCH (first_name,last_name) AGAINST ('*?*' IN BOOLEAN MODE) OR MATCH (groups.groupname) AGAINST ('*?*' IN BOOLEAN MODE) 
 ORDER BY 'score' Desc 

1) Как я могу ЗАКАЗАТЬ по совместному счету?Я имею в виду, что с помощью этого SQL-заявления, он создает счет для первого матча и счет для второго.Как я могу сложить эти две оценки и упорядочить их по этой оценке?

2) Также я знаю, что, поскольку данные не совпадают, INNER JOIN не самый лучший способ.есть ли в любом случае, я могу удалить его?

и, наконец, если я удаляю В БУЛЕВОМ РЕЖИМЕ, когда я использую, например, sim и first_name - это simos, я не получаю результат.На самом деле, я получаю пустой набор результатов в булевом режиме, если я поставлю sim Я получу simos в качестве результата.

РЕДАКТИРОВАТЬ: я ответил на 2-й вопрос, выполнив это

(SELECT `id`,MATCH(first_name,last_name) AGAINST ('?*' IN BOOLEAN MODE) AS score FROM `users` WHERE MATCH(first_name,last_name) AGAINST ('?*' IN BOOLEAN MODE))

union (ВЫБРАТЬ groupid, МАТЧ (имя группы) ПРОТИВ ('? ') КАК СЧЕТ ОТ groups ГДЕ МАТЧ (имя группы) ПРОТИВ ('? '))

Хотя это и меняет все, так как мне не нужен общий счет, но все еще есть проблема с IN BOOLEAN MODE

1 Ответ

1 голос
/ 12 июля 2011

order by 'score' неверно, он будет пытаться упорядочить по фиксированной строке score ', а не по псевдониму, который вы создали в match ... against.

Попробуйте

...
ORDER BY (score + sscore) DESC
...