Страница 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
приоритет операций это даже не программирование, а математика.