Phalcon PHQL GROUP BY 错误
Phalcon PHQL GROUP BY error
在我的查询中添加 GROUP BY
时,Phalcon 给我一个错误 - Phalcon\Mvc\Model\Exception: 语法错误,意外的标记组,靠近 ' BY...
这是我的代码;
$phql = "
SELECT $dist $ads_model.id AS id, $ads_model.title AS title, $ads_model.description AS description, $ads_model.country AS country, $ads_model.city AS city, $ads_model.latitude AS latitude, $ads_model.longitude AS longitude, $image_model.file AS image
FROM $ads_model
LEFT JOIN $image_model ON $image_model.ad_id = $ads_model.id
WHERE $where
GROUP BY $ads_model.id
$order
";
$ads = $this->modelsManager->executeQuery($phql);
这是正在生成的查询;
Phalcon\Mvc\Model\Manager->executeQuery(\n SELECT (3959 * acos( cos( radians( xxxx ) ) * cos( radians( \Baseapp\Models\ClassifiedsAds.latitude ) ) * cos( radians( \Baseapp\Models\ClassifiedsAds.longitude ) - radians( xxxx ) ) + sin( radians( xxxx ) ) * sin( radians( \Baseapp\Models\ClassifiedsAds.latitude ) ) ) ) AS distance,
\Baseapp\Models\ClassifiedsAds.id AS id, \Baseapp\Models\ClassifiedsAds.title AS title, \Baseapp\Models\ClassifiedsAds.description AS description, \Baseapp\Models\ClassifiedsAds.country AS country, \Baseapp\Models\ClassifiedsAds.city AS city, \Baseapp\Models\ClassifiedsAds.latitude AS latitude, \Baseapp\Models\ClassifiedsAds.longitude AS longitude, \Baseapp\Models\ClassifiedsImages.file AS image\n
FROM \Baseapp\Models\ClassifiedsAds\n
LEFT JOIN \Baseapp\Models\ClassifiedsImages ON \Baseapp\Models\ClassifiedsImages.ad_id = \Baseapp\Models\ClassifiedsAds.id\n
WHERE \Baseapp\Models\ClassifiedsAds.status = 'active' Having distance <= 100\n
GROUP BY \Baseapp\Models\ClassifiedsAds.id\n
ORDER BY distance ASC\n )
运行 MySQL 中查询的简化版本按预期工作。为什么 Phalcon 搞砸了 GROUP BY
子句?如果 GROUP BY
被遗漏,查询将运行。我如何让它在 PHQL 中工作?
还有一个完全相关的问题:我为此使用 PHQL,因为 Phalcon 的分页似乎不适用于原始 MySQL。有没有办法让 Phalcon 分页与 raw 一起工作(无需进行自定义分页)?
你的子句顺序有误。
您必须在 GROUP BY
之后声明 HAVING
子句。
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_condition]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
有关完整示例,请参阅 mysql docs。
在我的查询中添加 GROUP BY
时,Phalcon 给我一个错误 - Phalcon\Mvc\Model\Exception: 语法错误,意外的标记组,靠近 ' BY...
这是我的代码;
$phql = "
SELECT $dist $ads_model.id AS id, $ads_model.title AS title, $ads_model.description AS description, $ads_model.country AS country, $ads_model.city AS city, $ads_model.latitude AS latitude, $ads_model.longitude AS longitude, $image_model.file AS image
FROM $ads_model
LEFT JOIN $image_model ON $image_model.ad_id = $ads_model.id
WHERE $where
GROUP BY $ads_model.id
$order
";
$ads = $this->modelsManager->executeQuery($phql);
这是正在生成的查询;
Phalcon\Mvc\Model\Manager->executeQuery(\n SELECT (3959 * acos( cos( radians( xxxx ) ) * cos( radians( \Baseapp\Models\ClassifiedsAds.latitude ) ) * cos( radians( \Baseapp\Models\ClassifiedsAds.longitude ) - radians( xxxx ) ) + sin( radians( xxxx ) ) * sin( radians( \Baseapp\Models\ClassifiedsAds.latitude ) ) ) ) AS distance,
\Baseapp\Models\ClassifiedsAds.id AS id, \Baseapp\Models\ClassifiedsAds.title AS title, \Baseapp\Models\ClassifiedsAds.description AS description, \Baseapp\Models\ClassifiedsAds.country AS country, \Baseapp\Models\ClassifiedsAds.city AS city, \Baseapp\Models\ClassifiedsAds.latitude AS latitude, \Baseapp\Models\ClassifiedsAds.longitude AS longitude, \Baseapp\Models\ClassifiedsImages.file AS image\n
FROM \Baseapp\Models\ClassifiedsAds\n
LEFT JOIN \Baseapp\Models\ClassifiedsImages ON \Baseapp\Models\ClassifiedsImages.ad_id = \Baseapp\Models\ClassifiedsAds.id\n
WHERE \Baseapp\Models\ClassifiedsAds.status = 'active' Having distance <= 100\n
GROUP BY \Baseapp\Models\ClassifiedsAds.id\n
ORDER BY distance ASC\n )
运行 MySQL 中查询的简化版本按预期工作。为什么 Phalcon 搞砸了 GROUP BY
子句?如果 GROUP BY
被遗漏,查询将运行。我如何让它在 PHQL 中工作?
还有一个完全相关的问题:我为此使用 PHQL,因为 Phalcon 的分页似乎不适用于原始 MySQL。有没有办法让 Phalcon 分页与 raw 一起工作(无需进行自定义分页)?
你的子句顺序有误。
您必须在 GROUP BY
之后声明 HAVING
子句。
[GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...]
有关完整示例,请参阅 mysql docs。