Как связать с плавающей точкой команду SQL в Yii для Postgres?

1

Я получаю ошибку

Database Exception – yii\db\Exception

SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for integer: "0.0001"
The SQL being executed was: select ad_id, sum(clicks) sc, sum(impressions) si, from ad_table group by keyword_id 
having sum(clicks)/sum(impressions) < 0.0001 
Error Info: Array
(
    [0] => 22P02
    [1] => 7
    [2] => ERROR:  invalid input syntax for integer: "0.0001"
)
↵
Caused by: PDOException

SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for integer: "0.0001"

Мой код

$sql = ...
  ."having sum(clicks)/sum(impressions) < :ctr "; 
$ids = Yii::$app->db->createCommand($sql)
  ->bindValue(':ctr', (float)getConfigValue('ctr'))
  ->queryColumn();

Я попытался установить третий параметр в \PDO::PARAM_STR, но он все же дал ту же ошибку. Я также попытался удалить (float), но такую же ошибку. Существует даже десятичный тип: http://php.net/manual/en/pdo.constants.php

Это работало в MySQL. Я переезжаю в Postgres. SQL работает непосредственно в psql.

Ссылка: http://www.yiiframework.com/doc-2.0/yii-db-command.html#bindValue()-detail

  • 0
    Определяется ли столбец как целое число в базе данных?
  • 0
    Какой SQL работает непосредственно в PostgreSQL? Также, пожалуйста, добавьте структуру таблицы базы данных с типами столбцов. А почему вы не используете ActiveQuery и ActiveRecord? Или yii\db\Query хотя бы?
Показать ещё 2 комментария
Теги:
yii2
pdo
yii

1 ответ

1
Лучший ответ

В Postgres разделение двух целых чисел является целым делением, поэтому вы сравниваете целое число с поплавком.

select 2/3; -- returns 0
select 2/3.0; -- returns 0,6666…7

Попробуйте having sum(clicks)/cast(sum(impressions) as float4) < 0.0001

  • 0
    да, в некоторых случаях полезно целочисленное деление :)
  • 0
    Вау, это сработало. Интересно, почему SQL работал в psql ?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню