@NikitaML

Sequalize — как по id товара и массиву из опций, найти id торгового предложения строго включающий в себя все эти опции, не больше и не меньше?

В теле запроса передаю такие данные:
{
    "id": 1,
    "optionsId" : [1,5,10,11,12,13,14]
}


Есть промежуточная таблица где каждому торговому предложению соответствует опция, опций может быть несколько, в объекте выше обозначены как "optionsId". Ниже для наглядности прикрепляю таблицу

627e62f834651288929340.png

Суть задачи - по id товара и массиву состоящему из опций, найти id торгового предложения строго включающий в себя все эти опции, не больше и не меньше

Пробовал написать сам, перечитал всю документацию, но так увы и не приблизился, вот собственно мой код, чтоб было от чего оттолкнуться:
async getTponOption(req, res){
        const {id, optionsId} = req.body

        const TpAndOptions = await ProductsTpToOptionsTp.find({
            where: {
                [Op.and]:[
                    {productId: id},
                    {optionsTpid: optionsId} 
                ],
            } 
        })
       return res.json(TpAndOptions)
    }


если кто-то знает как это сделать в mysql обычным запросом, тоже приветствуется! но приоритетней решить задачу с помощью sequalize.
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 1
Maksclub
@Maksclub
maksfedorov.ru
SQL запрос такой

Тут используется небольшой чит (эвритсика) — заранее вычисляется сумма значений в optionsTpid и подставляется в группировку

SELECT productsTpId
FROM (SELECT productId, productsTpId
      FROM tt
      WHERE TRUE
        AND (
          optionsTpid = 1
          OR optionsTpid = 5
          OR optionsTpid = 10
        )
      GROUP BY productId, productsTpId
      HAVING COUNT(productId) = 3 -- тут длина (количество) значений optionsTpid (1, 5, 10— это 3 значения)
     ) AS nest
WHERE productId = 2   --  искомый productId


Пруф работы: sqlfiddle.com/#!9/9f8b5a5/1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы