Релевантный поиск по нескольким таблицам

beriv

Guest
Релевантный поиск по нескольким таблицам

Есть задача - искать фразу релевантно по нескольким таблицам. По одной таблице это сделать очень просто, см статью http://detail.phpclub.net/2001-12-09.htm.
Но как сделать подобный поиск по нескольким таблицам сразу?
 

HEm

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

Анатолий

Новичок
Автор оригинала: HEm
вставить данные во временную таблицу или держать таковую специально для поиска
А по другому никак??? Очень уж накладно получается с промежуточной таблицей....

Не у кого по другому не получилось?
 

Green

Новичок
mysql> SELECT id,MATCH (title,body) AGAINST ('Tutorial') FROM articles;
+----+-----------------------------------------+
| id | MATCH (title,body) AGAINST ('Tutorial') |
+----+-----------------------------------------+
| 1 | 0.64840710366884 |
| 2 | 0 |
| 3 | 0.66266459031789 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
+----+-----------------------------------------+
Выбираем значение релевантности, запихиваем результаты в ассоциативный массив релевантность => значение и сортируем по релевантности
 

chisto_tolyan

Враг народа
Green - феерический совет(с)Фанат.
А об ORDER BY не слыхал?) и вообще-то автор спрашивал как делать поиск по НЕСКОЛЬКИМ таблицам, а не по одной)
 

Green

Новичок
chisto_tolyan Ты наверное недопонял.
Вообще-то в "поле" MATCH (title,body) AGAINST ('Tutorial') выводится абсолютное значение релевантности. Если нужно сделать поиск по нескольким таблицам, делается подобный запрос для нескольких таблиц, скидывается в один массив и сортируется уже в PHP по абсолютному значению релевантности.
 

chisto_tolyan

Враг народа
Green
Я то наверное понял, но наверное, объясни зачем сортировку делать в самом пхп, когда ее можно сделать в самом мускуле?
И наверное автор хочет делать поиск по нескольким таблицам ОДНИМ запросом...
 

Rammstein

PHPClub::News
[sql]SELECT id,MATCH (t1.title,t1.body,t2.text) AGAINST ('Tutorial') AS Rolev FROM articles AS t1, table_two AS t2 ORDER BY Rolev;[/sql]
Не прокатит? Я точно не знаю....
 

alpine

Новичок
Rammstein
Для использования MATCH() AGAINST() нужно создать FULLTEXT индекс, а индекс можно создать только для полей типа сhar, varchar и text для одной и той же таблицы. Следовательно ответ нет, не получится.
 

Rammstein

PHPClub::News
Автор оригинала: alpine
Rammstein
Для использования MATCH() AGAINST() нужно создать FULLTEXT индекс, а индекс можно создать только для полей типа сhar, varchar и text для одной и той же таблицы. Следовательно ответ нет, не получится.
Непонял... где в моём запросе намёк на то, что это не text, к прмиеру?
 

alpine

Новичок
Rammstein
А ты думаешь что твой запрос именно по этой причине может не работать?
 

kos

Новичок
Все параметры функции MATCH() должны быть столбцами одной и той же таблицы, т.е. частью одного и того же индекса FULLTEXT, за исключением работы MATCH() в режиме IN BOOLEAN MODE.
остаётся только union
 
Сверху