2015-09-08 2 views
0

Я весь день ломаю голову, пытаясь понять это! Я надеюсь, что вы, ребята, можете помочь.MySQL «Фильтр» для служб

Я строю систему PHP, которая будет отфильтровывать записи для «Поставщиков» в таблице MySQL.

услуги хранятся в таблице, например:

id 
service 

поставщиков хранятся в таблице, например:

id 
company_name 

Затем после долгого чтения я добавил дополнительную таблицу, в которой связывает поставщиков, их соответствующие услуги:

id 
supplier_id 
service_id 

Один поставщик может предложить множество услуг.

Когда пользователь нажимает на фильтр (теги span, которые имеют jQuery на кликах, которые фиксируют идентификатор вызванного сервиса), я хочу показать поставщиков, которые предлагают эту услугу. Когда пользователь нажимает на дополнительную услугу, я хочу отображать только тех поставщиков, которые предлагают обе эти услуги. И так далее ...

Я изо всех сил пытаюсь установить a) это правильный путь вперед, и б) что будет для него SQL. На данный момент я передаю дополнительный идентификатор службы на PHP с использованием $ .GET и сохраняю строку из них как CSV в переменных сеанса.

Большое спасибо заранее,

Джеймс

+0

too wide bro :) – aimme

ответ

1
  1. это правильный путь вперед

    Кажется звук для меня, до сих пор.

  2. , что SQL будет для него

    Чтобы получить подробную информацию о всех тех поставщиков, которые поставляют как идентификатор услуги 4 и служба идентификатор 7, вы можете первым присоединиться к в столы затем группа их поставщиками и фильтр результирующие группы для тех, которые содержат искомые матчи:

    SELECT p.* 
    FROM  suppliers   p 
        JOIN supplier_services a ON a.supplier_id = p.id 
    GROUP BY p.id 
    HAVING SUM(a.service_id = 4) 
        AND SUM(a.service_id = 7) 
    

    Чтобы улучшить производительность этого запроса, вы можете добавить WHERE a.service_id IN (4,7) - это было бы особенно полезно, если есть индекс на supplier_services(supplier_id, service_id).

+0

Вы, гений. Большое спасибо. Работает очарование! –