SELECT pd.product_id,
d.name,
d.discount_percent,
d.discount_amount
FROM s_products_discount pd
INNER JOIN s_discounts d
ON d.id = pd.discount_id
AND d.visible = 1
AND d.date_from <= '2018-05-05'
AND d.date_to >= '2018-05-05'
WHERE pd.product_id IN ('41987', '41988', '41989', '41990', '41991', '41992', '41993', '41994')
AND NOT EXISTS (SELECT 1
FROM s_discounts dd
WHERE dd.id = pd.discount_id
AND dd.priority > d.priority
AND dd.visible = 1
AND dd.date_from <= '2018-05-05'
AND dd.date_to >= '2018-05-05')
SELECT pd.product_id,
d.name,
d.discount_percent,
d.discount_amount
d.priority
FROM s_products_discount pd
INNER JOIN s_discounts d
ON d.id = pd.discount_id
AND dd.visible = 1
AND dd.date_from <= '2018-05-05'
AND dd.date_to >= '2018-05-05'
AND d.priority = (SELECT MAX(dd.priority)
FROM s_discounts dd
WHERE dd.id = pd.discount_id
AND dd.visible = 1
AND dd.date_from <= '2018-05-05'
AND dd.date_to >= '2018-05-05')
WHERE pd.product_id IN ('41987', '41988', '41989', '41990', '41991', '41992', '41993', '41994')
С(n,1) - это можно не считать, оно всегда равно n
C(n,3)
C(n,5)
Вот ссылка на вики, там подробно описано:
https://ru.m.wikipedia.org/wiki/%D0%A1%D0%BE%D1%87...
Моя версия решения выглядит так:
Результат:
500
255244687600
1966484710415128789600