Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / выборка MIN и MAX суммы с учётом скидки/наценки производителя / 7 сообщений из 7, страница 1 из 1
06.03.2015, 10:35:09
    #38896909
woojin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка MIN и MAX суммы с учётом скидки/наценки производителя
всем привет!
вот запрос
Код: 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
06.03.2015, 10:40:03
    #38896915
woojin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка MIN и MAX суммы с учётом скидки/наценки производителя
целиком не влез, первая часть:
...
Рейтинг: 0 / 0
06.03.2015, 10:40:39
    #38896916
woojin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка MIN и MAX суммы с учётом скидки/наценки производителя
целиком не влез, вторая часть:
...
Рейтинг: 0 / 0
06.03.2015, 10:47:28
    #38896923
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка MIN и MAX суммы с учётом скидки/наценки производителя
Забавный у тебя запрос... тебе бы получить MIN/MAX, и пофиг, к какому оно товару относится?
...
Рейтинг: 0 / 0
06.03.2015, 10:54:42
    #38896932
woojin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка MIN и MAX суммы с учётом скидки/наценки производителя
это сами таблички:
...
Рейтинг: 0 / 0
06.03.2015, 10:56:19
    #38896935
woojin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка MIN и MAX суммы с учётом скидки/наценки производителя
Akina, фильтру главное что бы у него слева было минимальное значение, а справа максимальное (цена: минимум-максимум)
...
Рейтинг: 0 / 0
12.03.2015, 20:55:57
    #38903100
woojin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка MIN и MAX суммы с учётом скидки/наценки производителя
вижу ни кто не смог помочь ((((

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


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