PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
pantela
Отправлено: 30 Июня, 2016 - 19:05:09
Частый посетитель
Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010
Помог: 1 раз(а)
В БД имею записи, где значение у поля amount виде:
48.35
29
120
4.5
17.9
т.е. некоторые числа целые некоторые нет.
Делаю ORM запрос виде:
PHP:
скопировать код в буфер обмена
$res = DB:: select ( )
-> from ( $this -> _table_name) ;
( isset ( $filter [ 'min_price' ] ) && $filter [ 'min_price' ] != '' ) ?
$res = $res -> and_where ( 'amount' , '>=' , $filter [ 'min_price' ] ) : '' ; ( isset ( $filter [ 'max_price' ] ) && $filter [ 'max_price' ] != '' ) ?
$res = $res -> and_where ( 'amount' , '<=' , $filter [ 'max_price' ] ) : '' ;
$res = $res -> order_by ( 'id' , 'DESC' ) ;
$res = $res -> execute ( ) -> as_array ( ) ;
Но результат конечно выводит только целые числа.
Посмотрел что-то о DECIMAL , но особо не понял как использовать, тем более в ORM
T1grOK
Отправлено: 30 Июня, 2016 - 20:20:09
Частый гость
Покинул форум
Сообщений всего: 129
Дата рег-ции: Июнь 2013
Помог: 7 раз(а)
Запрос вполне валидный, причина в чем то другом.
-----Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
T1grOK
Отправлено: 30 Июня, 2016 - 21:20:22
Частый гость
Покинул форум
Сообщений всего: 129
Дата рег-ции: Июнь 2013
Помог: 7 раз(а)
pantela пишет: Вроде этот вопрос и другие поднимали...
Совсем другой случай.
-----Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
pantela
Отправлено: 01 Июля, 2016 - 14:20:50
Частый посетитель
Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010
Помог: 1 раз(а)
IllusionMH пишет: pantela, а какой вообще тип поля в БД? Не пробовали в запросах числа в кавычки не брать?
Тип поля "
varchar(5) "
Причина и правка в ковичках была...
Сделал так, вроде работает и верно:
PHP:
скопировать код в буфер обмена
$res = $res -> and_where ( 'amount' , '>=' , DB:: expr ( $filter [ 'min_price' ] ) ) ;
$res = $res -> and_where ( 'amount' , '<=' , DB:: expr ( $filter [ 'max_price' ] ) ) ;
Но тогда появляеться SQL Inject (Отредактировано автором: 01 Июля, 2016 - 14:28:46)
T1grOK
Отправлено: 18 Июля, 2016 - 15:07:14
Частый гость
Покинул форум
Сообщений всего: 129
Дата рег-ции: Июнь 2013
Помог: 7 раз(а)
Сооружение костыля на практике.
Не лучше ли преобразовать поле amount к типу с плавающей точкой?!
-----Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB