SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 03.05.2011 16:25:46

Van777
Участник
Зарегистрирован: 29.04.2011
Сообщений: 6

Создание поиска

Привет!
Подскажите! Мне нужно создать полнотекстовый поиск в таблице. (см. вложение). Поиск осуществляется за 4 критериями: тип, марка, модель, название.
Создал вот такой запрос:
SELECT
    prices.typeauto,
    prices.marka,
    prices.model,
    prices.namezapch,
    prices.numberkatalog,
    prices.maker, 
    prices.price,
    prices.valuta,
    prices.deliverydate,
    prices.idUser as idUser,
    users.sitename as sitename,
    users.company as company
FROM prices
INNER JOIN pricesAccess ON prices.idUser = pricesAccess.idUser
INNER JOIN users ON prices.idUser = users.id_USER
WHERE
    pricesAccess.access = 1 AND
    MATCH (prices.typeauto, prices.marka, prices.model, prices.namezapch, prices.numberkatalog)
    AGAINST ('+Легковые Audi 80S Глушитель*' IN BOOLEAN MODE);
---------------------------

Выводит огромнгое кол-во записей, не совсем удобно если нужно отыскать конкретную запись.
Создал другой запрос:
--------------------------------
SELECT
    prices.typeauto,
    prices.marka,
    prices.model,
    prices.namezapch,
    prices.numberkatalog,
    prices.maker, 
    prices.price,
    prices.valuta,
    prices.deliverydate,
    prices.idUser as idUser,
    users.sitename as sitename,
    users.company as company
FROM prices
INNER JOIN pricesAccess ON prices.idUser = pricesAccess.idUser
INNER JOIN users ON prices.idUser = users.id_USER
WHERE
  pricesAccess.access = 1 AND
    MATCH (prices.typeauto) AGAINST ('+Грузовые*' IN BOOLEAN MODE) AND
  MATCH (prices.marka) AGAINST ('+Fiat*' IN BOOLEAN MODE) AND
    MATCH (prices.model) AGAINST ('+153MF*' IN BOOLEAN MODE) AND
    MATCH (prices.namezapch, prices.numberkatalog) AGAINST ('+фильтр*' IN BOOLEAN MODE);
-----------------------------
Так что-то более к естественней отбирает и выводит. Подскажите как лутчше оптимизировать и настроить запрос чтобы пользователь за задаными 4-ма критериями смог четко отыскать себе нужную запчасть в прайсе. Говорят что несколько комбинация MATCH-AGAINST использовать нельзя (для каждой табл. нужен только одна такая конструкция или может я не прав???


Прикрепленные файлы:
Attachment Icon table.jpg, Размер: 160,736 байт, Скачано: 463

Неактивен

 

#2 04.05.2011 02:11:33

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Создание поиска

Да, лучше добавьте табличек с типами автомобилей, марками, моделями.
Тогда и полнотекстовый индекс не нужен будет smile

Неактивен

 

#3 04.05.2011 09:14:14

Van777
Участник
Зарегистрирован: 29.04.2011
Сообщений: 6

Re: Создание поиска

не получится добавить таблички, поскольку в таблицу prices загружается файл целиком с помощью LOAD. Так как Вы считаете: лутчше будет первый или второй вышеуказаный запрос на поиск???

Неактивен

 

#4 04.05.2011 19:55:45

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Создание поиска

Лучше тот, который работает правильно и отвечает за время, которое
Вас устраивает. Если возможности менять нет, то менять ничего не полу-
чится, разумеется. На очень большой таблице, кажется, первый вариант
будет работать быстрее. Ну разве что плюсики в boolean mode ст́оит ста-
вить у каждого слова.

Неактивен

 

#5 21.06.2011 23:02:13

maskaral
Участник
Зарегистрирован: 10.06.2009
Сообщений: 9

Re: Создание поиска

Van777 написал:

не получится добавить таблички, поскольку в таблицу prices загружается файл целиком с помощью LOAD. Так как Вы считаете: лутчше будет первый или второй вышеуказаный запрос на поиск???

имхо, лучше отказаться от LOAD или грамотно его переписать в пользу оптимизированной БД

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson