Я добавляю функцию поиска в приложение Rails.База данных представляет собой базу данных postgres, и в одной таблице сохранены два типа продуктов: родительский и вариантный.Если вариант может иметь только один продукт на основе столбца parent_id
, а родительский вариант может иметь много вариантов.Поиск может быть по названию, seller_sku, цене, product_type и так далее.Проблема заключается в том, что если запрос возвращает вариант, я хотел бы заменить его на его родительский элемент.
При этом будет сказано, что если несколько вариантов одного и того же родительского объекта встретятся с этим запросом и будут заменены его родителем, это дастдубликатЭто нехорошо из-за разбиения на страницы на уровне базы данных, нецелесообразно фильтровать дубликаты на уровне приложений, поскольку количество возвращаемых продуктов не будет меньше, чем то, что хочет видеть пользователь.Например, если пользователь хочет просмотреть 10 продуктов, которые отвечают запросу, и этот запрос обнаруживает 4 варианта одного и того же родителя, если я заменю их на родительский, а затем удалю дубликаты, в результате чего будет возвращено только 7 продуктов, даже еслиЕсть еще 100 человек.
Я могу сделать это на уровне приложения, отправив запрос в базу данных еще раз с некоторым смещением лимита, но мне не нравится такой подход.Я хочу знать, есть ли способ выполнить эту обработку на уровне базы данных с помощью самого запроса?
Надеюсь, я смог объяснить проблему ясно.