вычисления в запросе mysql

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
an.viktory@gmail.com
Сообщения: 536
Зарегистрирован: 2016.09.05, 23:21

вычисления в запросе mysql

Сообщение an.viktory@gmail.com »

допустим есть параметр price и avg_price, хочу сделать запрос где price <= avg_price на определенный процент $percent

Код: Выделить всё

$query->andWhere(['<=', 's.price', new Expression("`s.avg_price`*(100-".$percent.")/100")"]);
правильно ли это?
Последний раз редактировалось an.viktory@gmail.com 2018.03.12, 23:29, всего редактировалось 1 раз.
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: вычисления в запросе mysql

Сообщение andku83 »

а попробовать и посмотреть в дебаггер на получившийся запрос нельзя?
по-моему обратные кавычки лишнии
an.viktory@gmail.com
Сообщения: 536
Зарегистрирован: 2016.09.05, 23:21

Re: вычисления в запросе mysql

Сообщение an.viktory@gmail.com »

пишет что нет такого поля но он есть

Код: Выделить всё

$query->andWhere(['<=', 's.price', new Expression('s.avg_price']);
так работает,
вопрос как прицепить переменный процент
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: вычисления в запросе mysql

Сообщение andku83 »

весь текст ошибки сразу бы привели
an.viktory@gmail.com
Сообщения: 536
Зарегистрирован: 2016.09.05, 23:21

Re: вычисления в запросе mysql

Сообщение an.viktory@gmail.com »

а вот так сработало)

Код: Выделить всё

  $multiplier = (100-$percent)/100;
         $this->andWhere(['<=', 's.price', new Expression("s.avg_price*".$multiplier)]);
      
писало что такого поля s.avg_price*(100-20)/100 не существует может еще пробки понадобились?
и вопрос по оптимизации? непрожёрливый ли данный запрос?
Последний раз редактировалось an.viktory@gmail.com 2018.03.12, 23:50, всего редактировалось 1 раз.
yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: вычисления в запросе mysql

Сообщение yan »

`s.avg_price`
нельзя так обрамлять потому что
an.viktory@gmail.com
Сообщения: 536
Зарегистрирован: 2016.09.05, 23:21

Re: вычисления в запросе mysql

Сообщение an.viktory@gmail.com »

обрамление поставил потом потомуч то рендерилось без них
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: вычисления в запросе mysql

Сообщение andku83 »

andku83 писал(а): 2018.03.12, 23:21 ...по-моему обратные кавычки лишнии
an.viktory@gmail.com
Сообщения: 536
Зарегистрирован: 2016.09.05, 23:21

Re: вычисления в запросе mysql

Сообщение an.viktory@gmail.com »

первый раз у меня было без них это я потом уже прикрутил)) мне кажется выражение s.avg_price*(100-20)/100 надо было писать
s.avg_price*((100-20)/100)
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: вычисления в запросе mysql

Сообщение andku83 »

an.viktory@gmail.com писал(а): 2018.03.13, 00:11 ... мне кажется выражение s.avg_price*(100-20)/100 надо было писать
s.avg_price*((100-20)/100)
а в чем разница? вы знаете приоритет операций?
an.viktory@gmail.com
Сообщения: 536
Зарегистрирован: 2016.09.05, 23:21

Re: вычисления в запросе mysql

Сообщение an.viktory@gmail.com »

ну тогда хз чистый mysql знаю не очень.
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: вычисления в запросе mysql

Сообщение andku83 »

приоритет операций это даже не программирование, а математика.
Ответить