[MySQL] FULLTEXT, релевантность, несколько таблиц

rtyug
На сайте с 13.05.2009
Offline
263
2034

http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

http://www.google.com.ua/search?q=FULLTEXT...art=10&sa=N

не нашел как сделать поиск по нескольким таблицам!

кто как делал?

3 таблицы: comment, content, section

в них столбцы: name и text

нужно отсортировать по релевантность по нескольким таблицам

(видел что по разному можно сделать, может LIKE лучше?)

и я не могу найти как выести вместе с ними название самой таблицы в которой был результат!

(ну чтобы написать какой тип данных, с какой таблицы и ссылку поставить пользователю)

есть такая штука только не пойму как пользоватся http://search.cpan.org/~tjmather/DBIx-Full...llTextSearch.pm

Спалил тему: Pokerstars вывод WMZ, etc на VISA 0% или SWIFT + Конверт USD/GBP,etc (net profit $0,5 млрд) (https://minfin.com.ua/blogs/94589307/115366/) Monobank - 50₴ на счет при рег. тут (https://clck.ru/DLX4r) | Номер SIP АТС Москва 7(495) - 0Ꝑ, 8(800) - 800Ꝑ/0Ꝑ (http://goo.gl/XOrCSn)
Swhile
На сайте с 02.05.2007
Offline
58
#1

Если я все верно понял, предлагаю такой вариант: попробуйте сделать отдельно выборки из трех таблиц и уже в скрипте (php или чем вы там пользуетесь) сравнить коэффициенты релевантности найденных записей.

N
На сайте с 06.05.2007
Offline
419
#2

select ( 
select 'Найдено в таблице1',.. from table1 ...
union
select 'Найдено в таблице2',... from table2 ...
union
select 'Найдено в таблице3'... from table3 ..)
order by relevance;

cамый обычный классический sql.

Кнопка вызова админа ()
rtyug
На сайте с 13.05.2009
Offline
263
#3

А как узнать сколько результатов выдало?

что-то я не понимаю как это сделать

DeveloperRu
На сайте с 27.02.2009
Offline
72
#4

все просто - нужно действовать по такой схеме

допустим, есть 2 таблицы - table1 и table2

у каждой таблицы есть поле title - при этом поле титл первой таблицы более важное, чем второй:

SELECT *,

( (1.3 * (MATCH(table1.title) AGAINST ('+term +term2' IN BOOLEAN MODE))) +

(0.6 * (MATCH(table2.title) AGAINST ('+term +term2' IN BOOLEAN MODE))) ) AS relevance

FROM table1, table2

ORDER BY relevance DESC;

Ответы на вопросы (http://telenok.com)
rtyug
На сайте с 13.05.2009
Offline
263
#5

спасибо, это понял вроду бы

А как узнать сколько результатов выдало?

что-то я не понимаю как это сделать

чтобы сделать по страничный вывод

2 раза запрос надо сделать?

DeveloperRu
На сайте с 27.02.2009
Offline
72
#6

в конце добавь limit 0,20

rtyug
На сайте с 13.05.2009
Offline
263
#7

а как узнать как какой я странице? (есл ия не напервой)

то мне надо показать пользователю сколкьо страниц, во первых

и определить после лимит, откуда сам лимит считать

как это реализовать?

вы делали хоть когда-то по страничный вывод? надо с анчало узнать сколько всего элементов, в дальше лимит

или я вас не понял, вообще тема не расскрыта

====

А как узнать сколько результатов выдало?

что-то я не понимаю как это сделать

чтобы сделать по страничный вывод
2 раза запрос надо сделать?

DeveloperRu
На сайте с 27.02.2009
Offline
72
#8

да, нужно сделать два запроса - один как выше показано, а во втором меняется только

SELECT count(*) AS total,

[Удален]
#9

Так делают только наркоманы.

В запрос с лимитом сразу после селект ставите предикат SQL_CALC_FOUND_ROWS

а потом делаете второй запрос SELECT FOUND_ROWS() - он вернет одну ячейку с общим числом строчек до применения лимита.

[Удален]
#10
neolord:
Так делают только наркоманы.

Не только. Например стоит у вас своё кэширование запросов (запросы тоже через свой интерфейс отправляются). Тут через FOUND_ROWS() будет проблематично считать, если только не обрабатывать такую ситуацию отдельно. В случае же с count(*) достаточно закешировать один раз запрос и в течение некоторого времени не трогать базу, хотя конкретно представленный SELECT count(*) AS total базу совсем не нагружает - чтение служебной информации без трогания самой таблицы можно и запрашивать, но это применительно к конкретному запросу.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий