За последние 24 часа нас посетили 18534 программиста и 1599 роботов. Сейчас ищут 900 программистов ...

Подбор товара по параметрам (как на яндекс-маркете)

Тема в разделе "PHP и базы данных", создана пользователем Greider, 16 июл 2015.

  1. Greider

    Greider Активный пользователь

    С нами с:
    20 ноя 2013
    Сообщения:
    9
    Симпатии:
    0
    Допустим, есть несколько параметров для выбора электродвигателей - напряжение питания (220, 380), мощность ("от 10 до 50", "от 50 до 100", "от 100 до 500" и т.п.) и крутящий момент. На самом деле их больше, но для примера пусть будет три. Собственно можно сделать и бегунки "от и до", но суть не в этом.

    Нет проблемы сделать три формы (выпадающих списка или бегунков), по ним сформировать запрос к базе данных и получить результат.

    Но проблема в том, что не все комбинации возможны, и хочется чтобы пользователь это видел еще при вводе. Например, если он выбирает 220В, то чтобы и соответствующие мощности, которые есть только у 380В, были недоступны для выбора.
    Как на яндекс-маректе.

    Какой обычно алгоритм у таких вещей?
    Если в лоб, то получается, что при любом изменении формы нужно обновлять всю форму (аяксом) и проверять КАЖДЫЙ пункт выпадающего списка соответствующим запросом к базе? Но если пунктов в списке много и список параметров не один, то запросов получится очень много...
    Может есть еще принципы?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Три? Формы?

    Из наличия нескольких параметров НЕ следует, что запросов должно быть несколько! Скорее это зависит от того, сколько раз пользователь что-то изменил в параметрах, и от величины таймаута. Один запрос на каждое следующее состояние.

    Принцип такой: не надо волноваться о том, что ещё не произошло. Преждевременная эя… оптимизация это зло! Сделай себе "песочницу" и попробуй с ней поработать.

    Искать: "фасетный поиск" или "faceted search".
     
  3. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  4. Greider

    Greider Активный пользователь

    С нами с:
    20 ноя 2013
    Сообщения:
    9
    Симпатии:
    0
    заговорился... три поля конечно же
    Спасибо, почитаю )

    Ну вот допустим, поле мощность.
    Пользователь выбрал питание 220В. В варианте с фиксированными диапазонами у нас тут должны стать доступными пункты 10-50Вт,50-100Вт, а 100-500Вт и 500-1000Вт должны стать DISABLED. Получается каждый пункт списка надо проверить, если их 4, то получается 4 запроса...
    Или вынуть DISTINCT'ом все возможные варианты мощности при условии выбора такого питания в массив, а с ним уже работать средствами php?

    Добавлено спустя 3 минуты 12 секунд:
    Я можно сказать "китайский кодер", лишь бы работало, а тут такое чтиво мясистое... попробую почитать )
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  6. Greider

    Greider Активный пользователь

    С нами с:
    20 ноя 2013
    Сообщения:
    9
    Симпатии:
    0
    Это все конечно интересно, mongoDB, сфинкс... но увы не мой уровень.
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Greider как не твой? Это сложнее sql tags но намного легче EAV.
    Почитай про mongoDB на русском, думаю сразу будет понятно как всё просто можно сделать.