SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.10.2015 03:31:41

gzhegow
Участник
Зарегистрирован: 22.10.2015
Сообщений: 4

Подсчитать цену в зависимости от параметров из таблицы

На сайте имеются проекты домов - таблица projects,
имеются параметры этих проектов в другой таблице - таблица projectparams
Имеется таблица для связи двух предыдущих со значениями - таблица projects_projectparams

Выборка всех возможных комбинаций осуществляется следующим запросом:


    SELECT
        `t0`.`id` `projects_id`,
        `t1`.`id` `projectparams_id`,
        `t1`.`defaultvalue`,
        `t1`.`defaultvaluealias`,
        `t1`.`globalvalue`,
        `t1`.`globalvaluealias`,
        `t2`.`value`,
        `t2`.`valuealias`,
        (CASE
            WHEN `t2`.`value` IS NOT NULL THEN `t2`.`value`
            WHEN `t1`.`globalvalue` IS NOT NULL THEN `t1`.`globalvalue`
            WHEN `t1`.`defaultvalue` IS NOT NULL THEN `t1`.`defaultvalue`
            ELSE NULL
        END) `searchvalue`,
        (CASE
            WHEN `t2`.`valuealias` IS NOT NULL THEN `t2`.`valuealias`
            WHEN `t2`.`value` IS NOT NULL THEN `t2`.`value`
            WHEN `t1`.`globalvaluealias` IS NOT NULL THEN `t1`.`globalvaluealias`
            WHEN `t1`.`globalvalue` IS NOT NULL THEN `t1`.`globalvalue`
            WHEN `t1`.`defaultvaluealias` IS NOT NULL THEN `t1`.`defaultvaluealias`
            WHEN `t1`.`defaultvalue` IS NOT NULL THEN `t1`.`defaultvalue`
            ELSE NULL
        END) `displayvalue`
    from `projects` `t0`
    cross join `projectparams` `t1`
    left join `projects_projectparams` `t2` on `t2`.`projects_id` = `t0`.`id` and `t2`.`projectparams_id` = `t1`.`id`
 


Вопрос следующий - каким запросом или как модифицировать имеющийся запрос, чтобы подсчитать цену, в зависимости от значений определенных параметров?

Например, есть у меня параметр Общая площадь. Значение default 0, глобальное - 100. Значение по текущему проекту не указано - берем глобальное.
Затем есть параметр Цена квадратного метра. Дефолт 0, глобальное 50, значение по текущему проекту не указано. Берем 50.
То есть итоговая ячейка должна иметь 50 * 100 = 5000.

Это запросто считается, если бы все параметры были в огромной горизонтальной таблице в длину на 400 колонок (для каждого параметра 8 новых колонок, как в SELECT)
Но этим запросом для каждого проекта, каждого параметра выводится новая строка, и таких строк получается 32 тысячи.

Нужно как-то перемножить значения из строк, которые не знают номеров друг друга.
Спасибо.

Отредактированно gzhegow (22.10.2015 03:33:56)

Неактивен

 

#2 22.10.2015 10:50:27

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Подсчитать цену в зависимости от параметров из таблицы

группировка по `t0`.`id`
where t1.id in (площадь, кв метр)
цена = (case ..) площадь * (case .. ) цена кв метра

Неактивен

 

#3 22.10.2015 12:06:29

gzhegow
Участник
Зарегистрирован: 22.10.2015
Сообщений: 4

Re: Подсчитать цену в зависимости от параметров из таблицы

Понял, а перемножение тут делается?
Ну например если цена это площадь умножить на цену метра умножить на 4 разных коэффициента?
Или тут уже оборачивать в еще один Селект?

И насколько я понимаю, это нужно делать как раз на уровне MYSQL, поскольку через PHP потом невозможно будет отфильтровать записи достаточно быстро?

Отредактированно gzhegow (22.10.2015 12:08:56)

Неактивен

 

#4 22.10.2015 12:17:53

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Подсчитать цену в зависимости от параметров из таблицы

не очень понял, приведите пример в несколько строк в виде
create table ..
insert into ..
и какой результат вы хотите получить

Неактивен

 

#5 22.10.2015 12:56:10

gzhegow
Участник
Зарегистрирован: 22.10.2015
Сообщений: 4

Re: Подсчитать цену в зависимости от параметров из таблицы

На текущий момент запрос благодаря вам вот такой:
https://i.gyazo.com/73698bd7a12e7fef63a09128d7195bd6.png

Результат его вот такой:
https://i.gyazo.com/f3e577e7cd6d3328c269df659cc695f4.png

Хочу получить вот что:
- площадь в каждой строке (дублировать значение)
- добавлю цену метра
- цена общая получается не из параметра, а считается как произведение площади на цену метра для каждого проекта, а после расчета дублируется в каждую строку
- коэффициенты определяются исходя из нескольких параметров, каждый из которых в своей строке, как мы видим, например, двухэтажные дома дороже одноэтажных, а двухэтажные с мансардой, дешевле двухэтажных без нее.
- и позже прикручу сюда еще таблицу скидок, где в зависимости от параметра может динамически присутствовать коэффициент поправки цены

И вот что не понимаю:
Нужно ли для этого делать SELECT в SELECT в SELECT, или дешевле по ресурсам будет выгрузить результат первого запроса в PHP, рассчитать все цены, а потом фильтровать обычным циклом через PHP опять же.

Отредактированно gzhegow (22.10.2015 12:59:00)

Неактивен

 

#6 22.10.2015 13:09:30

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Подсчитать цену в зависимости от параметров из таблицы

Не я не так предлагал smile
select в select это очень плохая мысль с т.з. производительности.

проще результат вашего первого запроса выгрузить в php и там рассчитывать цены по вашей логике

Неактивен

 

#7 22.10.2015 13:21:21

gzhegow
Участник
Зарегистрирован: 22.10.2015
Сообщений: 4

Re: Подсчитать цену в зависимости от параметров из таблицы

Спасибо!
А то я начал делать селект в селект в селект и... смотрю уже под 5 секунд запрос идет.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson