Страница 1 из 1

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

Добавлено: 2018.03.12, 23:13
an.viktory@gmail.com
допустим есть параметр price и avg_price, хочу сделать запрос где price <= avg_price на определенный процент $percent

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

$query->andWhere(['<=', 's.price', new Expression("`s.avg_price`*(100-".$percent.")/100")"]);
правильно ли это?

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

Добавлено: 2018.03.12, 23:21
andku83
а попробовать и посмотреть в дебаггер на получившийся запрос нельзя?
по-моему обратные кавычки лишнии

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

Добавлено: 2018.03.12, 23:31
an.viktory@gmail.com
пишет что нет такого поля но он есть

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

$query->andWhere(['<=', 's.price', new Expression('s.avg_price']);
так работает,
вопрос как прицепить переменный процент

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

Добавлено: 2018.03.12, 23:35
andku83
весь текст ошибки сразу бы привели

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

Добавлено: 2018.03.12, 23:43
an.viktory@gmail.com
а вот так сработало)

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

  $multiplier = (100-$percent)/100;
         $this->andWhere(['<=', 's.price', new Expression("s.avg_price*".$multiplier)]);
      
писало что такого поля s.avg_price*(100-20)/100 не существует может еще пробки понадобились?
и вопрос по оптимизации? непрожёрливый ли данный запрос?

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

Добавлено: 2018.03.12, 23:47
yan
`s.avg_price`
нельзя так обрамлять потому что

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

Добавлено: 2018.03.13, 00:00
an.viktory@gmail.com
обрамление поставил потом потомуч то рендерилось без них

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

Добавлено: 2018.03.13, 00:01
andku83
andku83 писал(а):
2018.03.12, 23:21
...по-моему обратные кавычки лишнии

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

Добавлено: 2018.03.13, 00:11
an.viktory@gmail.com
первый раз у меня было без них это я потом уже прикрутил)) мне кажется выражение s.avg_price*(100-20)/100 надо было писать
s.avg_price*((100-20)/100)

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

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

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

Добавлено: 2018.03.13, 00:19
an.viktory@gmail.com
ну тогда хз чистый mysql знаю не очень.

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

Добавлено: 2018.03.13, 00:25
andku83
приоритет операций это даже не программирование, а математика.