执行查询时使用“ ALL”运算符时出错

时间:2018-09-28 14:17:51

标签: postgresql phalcon

我需要使用phalcon框架执行以下查询: “从表GROUP BY的ID中选择SELECT的ID具有'31'= ALL(array_agg(status))” 如何使用Phalcon执行此查询? 当我执行以下操作时:

 Model::query()
   ->columns(['id'])
   ->groupBy('id')
   ->having('31 = ALL(array_agg(status))')
   ->execute();

我收到此错误消息: 语法错误,解析时出现意外令牌ALL,靠近'(array_agg(status))':SELECT id from [SomeNameSpace \ Model] GROUP BY [id] HAVING 31 = ALL(array_agg(status))(137)

2 个答案:

答案 0 :(得分:0)

我不确定100%支持哪些Postgres函数,但是您可以尝试如下操作:

Model::query()
    ->columns([
        'id',
        'ALL(array_agg(status)) AS statusCounter'
    ])
    ->groupBy('id')
    ->having('31 = statusCounter')
    ->execute();

请注意,我将聚合函数移到了select而不是having子句中。


更新:这是一个非常自定义查询的示例。不支持大多数使用的函数,有时编写一个简单的SQL查询并将所需的Model绑定到它上会更干净:

public static function findNearest($params = null)
{
    // A raw SQL statement
    $sql = '
        SELECT *, 111.045 * DEGREES(ACOS(COS(RADIANS(:lat))
         * COS(RADIANS(X(coords)))
         * COS(RADIANS(Y(coords)) - RADIANS(:lng))
         + SIN(RADIANS(:lat))
         * SIN(RADIANS(X(coords)))))
         AS distance_in_km
        FROM object_locations
        ORDER BY distance_in_km ASC
        LIMIT 0,5;    
    ';

    // Base model
    $model = new ObjectLocations();

    // Execute the query
    return new \Phalcon\Mvc\Model\Resultset\Simple(
        null,
        $model,
        $model->getReadConnection()->query($sql, $params)
    );
}

// How to use:
\Models\ObjectLocations::findNearest([
    'lat' => 42.4961756,
    'lng' => 27.471543300000008
])

答案 1 :(得分:0)

您需要将ALL添加为方言扩展名。查看此主题,例如https://forum.phalconphp.com/discussion/16363/where-yearcurrenttimestamp-how-to-do-this