Полнотекстовый поиск по нескольким таблицам по двум переменным php - PullRequest
1 голос
/ 31 августа 2009

У меня есть три таблицы с информацией, где business_id является общим потоком. У меня есть два поля ввода, одно для общего поиска (пользователи могут искать все, что они хотят) и ввод Zip. Со стороны php я ловлю общую строку поиска и устанавливаю ее на $search, а zip - на $zip.

Как я могу использовать переменную $search для MATCH любой из полнотекстовых неопределенностей затем ограничить эти совпадения с помощью $zip затем вернуть только идентификатор из таблицы c?

Моя структура базы данных ниже:

table coup
    id  << this is the my desired information from the search
    timestamp
    business_id
    coupvalue
    startdate
    enddate
    username
    status
    terms
    image
    description
        primary = id
        fulltext = name
table bloc
    id
    address
    city
    state
    zip
    business_id
    phone
    lat
    lon
        primary = id
table bus
    business_id
    name
    timestamp
    category
    subcat
        primary = business_id
        fulltext = name,category,subcat

Буду признателен за любую помощь!

1 Ответ

0 голосов
/ 31 августа 2009

Вы можете использовать условие or для совпадений:

select
    c.id
from
    coup c
    inner join bus b on
        c.business_id = b.business_id
    inner join block z on
        c.buisness_id = z.business_id
    where
        (match(c.name) against ('$search')
        or match (b.name, b.category, b.subcat) against ('$search'))
        and z.zip = '$zip'

Я не тестировал его, но это могло бы быть быстрее:

select
   c.id
from
    (select id, business_id 
     from coup 
     where match(name) against ('$search')
    ) as c
    left join
       (select business_id 
        from bus 
        where match(name, category, subcat) against ('$search')
       ) as b on
        c.business_id = b.business_id 
    inner join bloc z on
        c.business_id = z.business_id
where
    z.zip = '$zip'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...