PHP, MySQL Подход фильтрации электронной коммерции - PullRequest
0 голосов
/ 05 января 2012

У меня есть быстрый вопрос относительно подхода к отображению продуктов в пакете электронной коммерции, который я собираю вместе. Проблема, с которой я сталкиваюсь, заключается в том, что я хотел бы, чтобы посетители сайта сузили свой поиск.

Например, вариант использования будет:

  1. Посетитель в настоящее время просматривает сезон продуктов (например, Летние Коллекции)
  2. Затем он / она сможет фильтровать по категориям и брендам в течение этого сезона, поэтому, например, они могут решить, что они хотят видеть только брюки из одежды в изобилии.

Проблема, с которой я сталкиваюсь, заключается в том, что при выполнении одного SQL-запроса можно найти продукты, соответствующие всем трем из этих факторов (поэтому продукт находится в летней коллекции, представляет собой пару брюк, выполненных в изобилии). То, что делает это слишком сложным, заключается в том, что продукты могут быть разных категорий и сезонов. Таким образом, должно быть безумное количество соединений, чтобы получить правильный результат.

Моя структура базы данных выглядит следующим образом:

product -> product_category <- category
product -> product_season <- season
product <- brand (a product can only be made by one brand)

Надеюсь, кто-то может поделиться своей мудростью в этом ...

Ответы [ 2 ]

1 голос
/ 05 января 2012

Если у вас большой каталог, вам лучше использовать Apache Solr (http://lucene.apache.org/solr/).В противном случае есть несколько подходов.

Вам не нужны накладные расходы, и прямой SQL не так уж безумен, будет работать достаточно хорошо:

SELECT product.*
FROM product
LEFT JOIN product_category
LEFT JOIN category
LEFT JOIN product_season
LEFT JOIN season
WHERE season = ? AND category = ?

В качестве альтернативы, если вы неКак и количество возвращенных строк, вы можете объединить категорию и сезон в таблицу продуктов (новые столбцы), а затем использовать похожие запросы для поиска:

SELECT product.*
FROM product
where product.categories like '% category %'
  and product.seasons like '% season %'
0 голосов
/ 05 января 2012
Select product.* From product 
  Left Join product_category On (product.product_id = product_category.product_id)
  Left Join product_season On (product.product_id= product_season.product_id)
  Left Join brand On (product.product_id = brand.product_id)
    Where product_category.category_id = '$catId'
    And product_season.season_id = '$seasonId'
    And brand.brand_id = '$brandId'
      Order By product.product_name

Хорошо, это предполагает, что product, product_category, product_season, brand, season, category - все таблицы.Вы должны передать идентификаторы таблицы season и category непосредственно из того, что вы используете для фильтрации поиска, чтобы вам не пришлось присоединяться к этим таблицам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...