Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > делаю поиск по БД


Автор: Kefir 7.6.2004, 15:13
нужен поиск по БД. я так понял, что этим делом занимается MACTH() AGAINST(). только вот почему-то не получается... в таблице делаю много fulltext полей записываю туда что-то типа "Lord of Destruction...". говорю ему искать таким образом:

Код
SELECT * FROM film WHERE MATCH(title_o, title_r, director, studio, country, year, genre, num_discs, image, sound, subtitles, bonus, short) AGAINST('Lord*')


он мне возвращает путой сет. то ли лыжи не едут... или я чего то не понимаю?..

Автор: beif 7.6.2004, 16:32
а если использовать LIKE?

Автор: Kefir 7.6.2004, 20:59
beif, а если использовать MATCH() AGAINST()?

Автор: GoodBoy 8.6.2004, 11:39
Попробуй вот так:

Код
SELECT *, MATCH title_o, title_r, director, studio, country, year, genre, num_discs, image, sound, subtitles, bonus, short AGAINST('Lord') as weig FROM film WHERE weig>0

Автор: Kefir 8.6.2004, 18:03
GoodBoy, не-а... во-первых он мне говорит, что поля weig не существует (where clause). Поменял его на это само выражение с MATCH AGAINST - не работает. просто выбрал MATCH у всех записей - у всех 0 (и у этого самого "Lord of Destruction..."). А может быть что-то не то с самой MySQL? или всё дело в запросе?..

Автор: GoodBoy 9.6.2004, 10:39
ну вот тут немного инфы есть: http://www.kuzbass.ru/docs/mysql/manual_519.html#SEC708

Автор: MuToGeN 9.6.2004, 11:26
У меня проблем типа того был. Все решилось заменой
WHERE MATCH(f1,f2,f3) AGAINST('...')
на
WHERE MATCH(f1) AGAINST('...') OR MATCH(f2) AGAINST('...') OR MATCH(f3) AGAINST('...')
Добавлено @ 11:27
только, ессесно, это далеко не лучшее решение

Автор: GoodBoy 9.6.2004, 12:51
ну вместо этого
Код
WHERE MATCH(f1) AGAINST('...') OR MATCH(f2) AGAINST('...') OR MATCH(f3) AGAINST('...')

тогда уж проще было использовать:
Код
WHERE f1 LIKE '...' OR f2 LIKE '...' OR f3 LIKE '...'

:-))))))) Но это же не прикольно!!!

Автор: Kefir 9.6.2004, 13:28
интересно... если я делаю запрос
Код
SELECT * FROM film WHERE MATCH(title_o, title_r, director, studio, country, year, genre, num_discs, image, sound, subtitles, bonus, short) AGAINST('Lord*')
, то результат пустой, а если запрос такой:
Код
SELECT * FROM film WHERE MATCH(title_o) AGAINST('Lord*')

то мускул пишет ошибку: ERROR 1191: Can't find FULLTEXT index matching the column list

Автор: MuToGeN 9.6.2004, 16:34
Собственно, FULLTEXT индекс имеется?
Порой бывает полезно DROPнуть нафиг индексы и создать заново...

Автор: Kefir 9.6.2004, 20:53
MuToGeN, я почему и спрашивал - может это моя БД или MySQL Control Center глючит?.. fulltext поля есть. два раза пересоздавал...

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