Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > [MySQL] FULLTEXT, релевантность, несколько таблиц


Автор: gcc 30.5.2009, 09:03
http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html
http://www.google.com.ua/search?q=FULLTEXT+%D0%B8%D0%B7+%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85+%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86&hl=uk&start=10&sa=N

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

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

3 таблицы: comment, content, section 
в них столбцы: name и text

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

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

Автор: gcc 18.6.2009, 18:25

Код

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;


Код

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


=============

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

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

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

Автор: gcc 30.12.2009, 03:13
подскажите, есть ли возможность вывести поиск с двух таблиц?

вот пробовал, работабт, но они выводят одно и тоже раз 10 где-то, получается ерунда

или все таки лучше одной?
   
Код

 SELECT *,
MATCH (t1.name_co,t1.heading_name_co,t1.keys_co,t1.text_co,t2.name_se) AGAINST (? IN BOOLEAN MODE) as REL
FROM content AS t1,
section AS t2
WHERE MATCH (t1.name_co,t1.heading_name_co,t1.keys_co,t1.text_co,t2.name_se) AGAINST (? IN BOOLEAN MODE)
ORDER BY REL 


Код

SELECT * FROM section as t2, content as t1 WHERE MATCH (t1.name_co,t1.heading_name_co,t1.keys_co,t1.text_co,t2.name_se)
 AGAINST (? IN BOOLEAN MODE) 




Код

SELECT *,
( (1.3 * (MATCH(content.name_co) AGAINST (? IN BOOLEAN MODE))) +
(0.6 * (MATCH(section.name_se) AGAINST (? IN BOOLEAN MODE))) ) AS relevance
FROM content, section
    ORDER BY relevance DESC

Автор: Akina 30.12.2009, 09:22
Судя по сылкам, это MySQL (кстати, а фигли тогда вопрос в этом разделе делает?).
Если таблицы на MyISAM, и не требуется вывод данных или статистики раздельно по таблицам (или в таблицах есть идентифицирующее поле - а при его отсутствии можно пойти и на его создание), разумно использовать Merge Storage Engine.

Автор: Zloxa 30.12.2009, 12:07

M
Zloxa
Перенесено из баз данных

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)