powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / выборка MIN и MAX суммы с учётом скидки/наценки производителя
7 сообщений из 7, страница 1 из 1
выборка MIN и MAX суммы с учётом скидки/наценки производителя
    #38896909
woojin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем привет!
вот запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SELECT
  MIN(IF(ISNULL(pp1.override) OR pp1.override = 0, CASE WHEN ISNULL(pp1.`product_discount_id`) OR
    pp1.`product_discount_id` = 0 THEN ROUND(pp1.`product_price` / pp1.`currency_exchange_rate`, -1) WHEN pp1.`product_discount_id` > 0 AND
    calc.`calc_value_mathop` = '-' THEN ROUND((pp1.`product_price` - calc.`calc_value`) / pp1.`currency_exchange_rate`, -1) WHEN pp1.`product_discount_id` > 0 AND
    calc.`calc_value_mathop` = '-%' THEN ROUND((pp1.`product_price` - (pp1.`product_price` * (calc.`calc_value` / 100))) / pp1.`currency_exchange_rate`, -1) ELSE ROUND(pp1.`product_price` / pp1.`currency_exchange_rate`, -1)
  END, pp1.product_override_price)) AS min_product_price,
  MAX(IF(ISNULL(pp1.override) OR pp1.override = 0, CASE WHEN ISNULL(pp1.`product_discount_id`) OR
    pp1.`product_discount_id` = 0 THEN ROUND(pp1.`product_price` / pp1.`currency_exchange_rate`, -1) WHEN pp1.`product_discount_id` > 0 AND
    calc.`calc_value_mathop` = '-' THEN ROUND((pp1.`product_price` - calc.`calc_value`) / pp1.`currency_exchange_rate`, -1) WHEN pp1.`product_discount_id` > 0 AND
    calc.`calc_value_mathop` = '-%' THEN ROUND((pp1.`product_price` - (pp1.`product_price` * (calc.`calc_value` / 100))) / pp1.`currency_exchange_rate`, -1) ELSE ROUND(pp1.`product_price` / pp1.`currency_exchange_rate`, -1)
  END, pp1.product_override_price)) AS max_product_price
FROM dxntv_virtuemart_products AS p
  LEFT JOIN (SELECT
      `dxntv_virtuemart_product_prices`.*,
      `dxntv_virtuemart_currencies`.`currency_exchange_rate`
    FROM `dxntv_virtuemart_product_prices`
      INNER JOIN `dxntv_virtuemart_currencies`
        ON `dxntv_virtuemart_currencies`.`virtuemart_currency_id` = `dxntv_virtuemart_product_prices`.`product_currency`) AS pp1
    ON p.`virtuemart_product_id` = pp1.`virtuemart_product_id`
  LEFT JOIN dxntv_virtuemart_calcs AS calc
    ON (calc.calc_kind = "DATax"
    OR calc.calc_kind = "DBTax")
    AND calc.published = 1
    AND pp1.`product_discount_id` = calc.`virtuemart_calc_id`
WHERE p.`virtuemart_product_id` IN (6334, 4198, 4196, 4190, 4189, 4188, 13987, 4181, 4217, 4216, 4215, 4214, 4213, 4212, 4211, 4210, 4209, 4208, 4200, 4199, 4204, 4203, 4202, 4195, 4194, 4193, 4207, 4206, 4205, 7366, 4187, 4191, 14886, 14885, 4183, 4182, 4174, 4175, 4184, 4185, 7387, 13991, 4232, 13993, 7378, 7372, 14882, 12421, 4177, 4176, 7057, 12484, 12419, 12418, 12680, 7072, 7071, 7070, 7069, 7068, 12672, 12531, 12411, 4430, 7089, 12681, 12679, 12678, 7088, 12412, 11136, 7099, 7093, 12530, 7086, 12995, 12985, 12669, 12628, 6944, 12685, 12683, 12676, 12675, 6956, 6939, 12677, 6943, 14779, 7080, 6937, 12991, 12990, 7108, 7105, 6935, 6332, 6328, 6321, 13003, 12670, 12998, 14889, 12984, 12979, 12978, 12977, 14757, 6865, 13002, 13709, 4432, 12976, 12975, 12992, 7460, 13711, 13710, 12981, 12982, 12980, 12967, 3888, 3886, 3876, 14888, 12966, 12397, 12605, 7457, 8123, 8283, 7452, 7451, 3903, 3902, 3900, 3899, 3898, 3897, 3894, 3893, 12769, 12962, 12961, 7447, 4355, 12960, 12963, 13714, 8112, 12617, 14769, 14768, 12614, 12613, 12612, 12457, 3818, 4342, 9299, 11122, 4322, 4320, 12634, 4354, 3918, 3916, 8289, 14263, 12539, 12538, 12540, 12651, 1249, 14262, 8107, 13736, 14315, 14314, 14313, 14312, 3714, 8100, 11825, 11824, 11823, 11792, 420, 132, 419, 131, 130, 129, 128, 127, 2620, 2618, 2617, 11793, 2565, 11827, 11826, 2837, 427, 3292, 3291)


он выбирает минимальную и максимальную цены с учётом скидок
но надо ещё сделать скидку/наценку с учётом производителя

как внедрить сюда (скидку/наценку) производителя не могу сообразить

используемые сейчас таблицы:
dxntv_virtuemart_products - товары
dxntv_virtuemart_product_prices - цены
dxntv_virtuemart_currencies - валюты
dxntv_virtuemart_calcs - скидки/наценки

дополнительные таблицы (их в запросе нет):
dxntv_virtuemart_product_manufacturers - отношение товаров к производителям
dxntv_virtuemart_calc_manufacturers - отношение скидок/наценок к производителям

в приложении SQL файл с необходимыми и дополнительными табличками
...
Рейтинг: 0 / 0
выборка MIN и MAX суммы с учётом скидки/наценки производителя
    #38896915
woojin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
целиком не влез, первая часть:
...
Рейтинг: 0 / 0
выборка MIN и MAX суммы с учётом скидки/наценки производителя
    #38896916
woojin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
целиком не влез, вторая часть:
...
Рейтинг: 0 / 0
выборка MIN и MAX суммы с учётом скидки/наценки производителя
    #38896923
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забавный у тебя запрос... тебе бы получить MIN/MAX, и пофиг, к какому оно товару относится?
...
Рейтинг: 0 / 0
выборка MIN и MAX суммы с учётом скидки/наценки производителя
    #38896932
woojin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это сами таблички:
...
Рейтинг: 0 / 0
выборка MIN и MAX суммы с учётом скидки/наценки производителя
    #38896935
woojin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, фильтру главное что бы у него слева было минимальное значение, а справа максимальное (цена: минимум-максимум)
...
Рейтинг: 0 / 0
выборка MIN и MAX суммы с учётом скидки/наценки производителя
    #38903100
woojin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вижу ни кто не смог помочь ((((

в конце-концов, сам сообразил:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
SELECT ROUND(MIN(IF(NOT ISNULL(mm.value), 
  (CASE 
    WHEN mm.action = '-' THEN mm.min-mm.value
    WHEN mm.action = '+' THEN mm.min+mm.value 
    WHEN mm.action = '-%' THEN mm.min-(mm.min*mm.value/100)
    WHEN mm.action = '+%' THEN mm.min+(mm.min*mm.value/100)
    END)
  , mm.min)), -1) AS min_product_price,
  ROUND(MAX(IF(NOT ISNULL(mm.value), 
  (CASE 
    WHEN mm.action = '-' THEN mm.max-mm.value
    WHEN mm.action = '+' THEN mm.max+mm.value 
    WHEN mm.action = '-%' THEN mm.max-(mm.max*mm.value/100)
    WHEN mm.action = '+%' THEN mm.max+(mm.max*mm.value/100)
    END)
  , mm.max)), -1) AS max_product_price
  FROM (SELECT
  IF(ISNULL(pp1.override) OR pp1.override = 0, CASE WHEN ISNULL(pp1.product_discount_id) OR
    pp1.product_discount_id = 0 THEN ROUND(pp1.product_price / pp1.currency_exchange_rate, -1) WHEN pp1.product_discount_id > 0 AND
    calc.calc_value_mathop = '-' THEN ROUND((pp1.product_price - calc.calc_value) / pp1.currency_exchange_rate, -1) WHEN pp1.product_discount_id > 0 AND
    calc.calc_value_mathop = '-%' THEN ROUND((pp1.product_price - pp1.product_price * calc.calc_value / 100) / pp1.currency_exchange_rate, -1) ELSE ROUND(pp1.product_price / pp1.currency_exchange_rate, -1)
  END, pp1.product_override_price) AS min,
  IF(ISNULL(pp1.override) OR pp1.override = 0, CASE WHEN ISNULL(pp1.product_discount_id) OR
    pp1.product_discount_id = 0 THEN ROUND(pp1.product_price / pp1.currency_exchange_rate, -1) WHEN pp1.product_discount_id > 0 AND
    calc.calc_value_mathop = '-' THEN ROUND((pp1.product_price - calc.calc_value) / pp1.currency_exchange_rate, -1) WHEN pp1.product_discount_id > 0 AND
    calc.calc_value_mathop = '-%' THEN ROUND((pp1.product_price - pp1.product_price * calc.calc_value / 100) / pp1.currency_exchange_rate, -1) ELSE ROUND(pp1.product_price / pp1.currency_exchange_rate, -1)
  END, pp1.product_override_price) AS max,
  manTax.calc_value_mathop AS action,
  manTax.calc_value AS value
FROM
  dxntv_virtuemart_products p
  LEFT OUTER JOIN (SELECT
      dxntv_virtuemart_product_prices.*,
      dxntv_virtuemart_currencies.currency_exchange_rate
    FROM dxntv_virtuemart_product_prices
      INNER JOIN dxntv_virtuemart_currencies
        ON dxntv_virtuemart_currencies.virtuemart_currency_id = dxntv_virtuemart_product_prices.product_currency) pp1
    ON p.virtuemart_product_id = pp1.virtuemart_product_id
  LEFT OUTER JOIN dxntv_virtuemart_calcs calc
    ON (calc.calc_kind = "DATax"
    OR calc.calc_kind = "DBTax")
    AND calc.published = 1
    AND pp1.product_discount_id = calc.virtuemart_calc_id
  LEFT OUTER JOIN (SELECT DISTINCT
      pm.virtuemart_product_id,
      cman.calc_value_mathop,
      cman.calc_value
    FROM dxntv_virtuemart_product_manufacturers pm
      INNER JOIN dxntv_virtuemart_calc_manufacturers cm
        ON cm.virtuemart_manufacturer_id = pm.virtuemart_manufacturer_id
      INNER JOIN dxntv_virtuemart_calcs cman
        ON cman.virtuemart_calc_id = cm.virtuemart_calc_id
        AND cman.published = 1) manTax
    ON manTax.virtuemart_product_id = p.virtuemart_product_id
WHERE p.virtuemart_product_id IN (6334, 4198, 4196, 4190, 4189, 4188, 13987, 4181, 4217, 4216, 4215, 4214, 4213, 4212, 4211, 4210, 4209, 4208, 4200, 4199, 4204, 4203, 4202, 4195, 4194, 4193, 4207, 4206, 4205, 7366, 4187, 4191, 14886, 14885, 4183, 4182, 4174, 4175, 4184, 4185, 7387, 13991, 4232, 13993, 7378, 7372, 14882, 12421, 4177, 4176, 7057, 12484, 12419, 12418, 12680, 7072, 7071, 7070, 7069, 7068, 12672, 12531, 12411, 4430, 7089, 12681, 12679, 12678, 7088, 12412, 11136, 7099, 7093, 12530, 7086, 12995, 12985, 12669, 12628, 6944, 12685, 12683, 12676, 12675, 6956, 6939, 12677, 6943, 14779, 7080, 6937, 12991, 12990, 7108, 7105, 6935, 6332, 6328, 6321, 13003, 12670, 12998, 14889, 12984, 12979, 12978, 12977, 14757, 6865, 13002, 13709, 4432, 12976, 12975, 12992, 7460, 13711, 13710, 12981, 12982, 12980, 12967, 3888, 3886, 3876, 14888, 12966, 12397, 12605, 7457, 8123, 8283, 7452, 7451, 3903, 3902, 3900, 3899, 3898, 3897, 3894, 3893, 12769, 12962, 12961, 7447, 4355, 12960, 12963, 13714, 8112, 12617, 14769, 14768, 12614, 12613, 12612, 12457, 3818, 4342, 9299, 11122, 4322, 4320, 12634, 4354, 3918, 3916, 8289, 14263, 12539, 12538, 12540, 12651, 1249, 14262, 8107, 13736, 14315, 14314, 14313, 14312, 3714, 8100, 11825, 11824, 11823, 11792, 420, 132, 419, 131, 130, 129, 128, 127, 2620, 2618, 2617, 11793, 2565, 11827, 11826, 2837, 427, 3292, 3291)
  GROUP BY p.virtuemart_product_id ORDER BY p.virtuemart_product_id
  ) AS mm


пользуйтесь - вдруг кому ещё понадобится))))
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / выборка MIN и MAX суммы с учётом скидки/наценки производителя
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]