Life is a life... We are the humans...
помогите написать простенький поисковик по полям в бд (mysql)... поля в разных таблицах, при этом надо результат отсортировать по релевантности (то есть не просто выбор table.field LIKE %sometext% table2.field2 LIKE %sometext%, а что-то умнее)...

и ещё, как делать поиск по найденному? хранить поля, в которых поиск уже был, очень нехочется...



есть таблица table1 с полями id, ...

есть таблица table2 с полями id, parent, status, ...

надо выбрать поля из table1 такие, что table2.parent = table1.id, table2.status = 1;

только записей в table2 c полем parent равным id может быть не одна, но поля table1 должны быть выбраны только один раз (то есть LIMIT 1 не катит, т.к. LIMIT здесь отрежет следующие строки в table1).. и сделать это всё за один запрос...



бд mysql, язык php... особенно меня интерисует поиск по найденому)

Комментарии
21.08.2005 в 19:30

По первой части вопроса (про две разные таблицы и все такое) - смотрите в документации к Мускулю JOIN -ы разные и выбирайте, какой вам нужен.



По поводу второго пока думаю.
21.08.2005 в 21:25

Life is a life... We are the humans...
я понимаю что JOIN тока влом мануалы читать ))

второй кстати по идее решается SELECT DISTINCT или LEFT JOIN тока я ещё не тестил...
22.08.2005 в 12:39

Fire in a hole!
SELECT ...

FROM (

SELECT table1.*, table2.status

FROM table1

LEFT JOIN table 2 ON table2.parent=table1.id

WHERE table2.status=1)

WHERE ...



?
22.08.2005 в 12:41

Fire in a hole!
по поводу релевантности сходу пришёл в голову только постпроцессинг результатов поиска
22.08.2005 в 13:28

Life is a life... We are the humans...
Neiru

лан, на релевантность можно забить.. а как поиск в найденном делать??
23.08.2005 в 08:56

Fire in a hole!
1) если мускуль версии 4+, то обвесить вышеописанный запрос ещё одним селектом с параметрами "что найти в найденном". если прокатит.



2) если мускуль ниже четвёрки или метод 1) не катит, то или хранить результаты во временной таблице с последующей выборкой, или организовывать подобие двухшаговой формы, где "искать в найденном" - аналог второго шага. при этом данные исходного поиска выбираются каждый раз, а если надо, то сохраняются потом в массиве, который просматривается на присутствие "искать в найденном"
23.08.2005 в 13:39

Life is a life... We are the humans...
хм... первый метод это через UNION в смысле?

временных таблиц слишком много прийдётся создавать, поиск по разным таблицам идёт... хотя хороший вариант...

вот последний вариант неплохой..

сенкс...
23.08.2005 в 16:01

Fire in a hole!
> хм... первый метод это через UNION в смысле?



1) если мускуль версии 4+, то обвесить вышеописанный запрос ещё одним селектом с параметрами "что найти в найденном". если прокатит.
23.08.2005 в 16:02

Life is a life... We are the humans...
Neiru

ну вроде же UNION как раз селекты и объединяет...
23.08.2005 в 16:07

Fire in a hole!
обвесить != объединить
23.08.2005 в 16:19

Life is a life... We are the humans...
Neiru

хм) ок... *ушёл читать ман*
24.08.2005 в 00:35

Any troubles?
Mysql версии 4+ позволяет делать двойные селекты... А дальше в мане ))))
26.08.2005 в 18:15

Калянски
MrXaK а что мешает фуллтекстовый индекс сделать?