Полнотекстовый поиск в более чем 2 таблицах с разными данными
Привет у меня есть это заявление 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 не самый лучший. есть ли вообще я могу это убрать?
и, наконец, если я удаляю IN BOOLEAN MODE, когда я использую, например, sim и first_name - это simos, я не получаю результат. На самом деле, я получаю пустой набор результатов в булевом режиме, если я поставлю sim, я получу simos как результат.
РЕДАКТИРОВАТЬ: я ответил на мой второй вопрос, сделав это
(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))
союз (ВЫБРАТЬ groupid
, MATCH(имя группы) ПРОТИВ ('? ') КАК оценка groups
ГДЕ МАТЧ (имя группы) ПРОТИВ ('? '))
Это хотя и меняет все, хотя мне не нужен общий счет, но все еще есть проблема с IN BOOLEAN MODE
1 ответ
order by 'score'
неверно, он будет пытаться упорядочить по фиксированной строке score
', а не псевдоним, который вы создали в match ... against
,
Пытаться
...
ORDER BY (score + sscore) DESC