【问题标题】:Phalcon PHQL GROUP BY errorPhalcon PHQL GROUP BY 错误
【发布时间】:2016-06-02 18:54:34
【问题描述】:

在我的查询中添加GROUP BY 时,Phalcon 给我一个错误 - Phalcon\Mvc\Model\Exception: Syntax error, unexpected token GROUP, near to ' 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 一起工作(无需进行自定义分页)?

【问题讨论】:

  • 您选择的$dist 是什么? SELECT $dist $ads_model.id AS id
  • @Timothy 如果您查看生成的查询,您可以看到$dist 产生了什么,但它与问题无关。
  • 我看到你在使用having 之前使用group bygroup by 应该在 having 之前
  • @Timothy 谢谢这就是问题所在。我已将HAVING 标记到WHERE 的末尾。我现在把它移到GROUP BY 之后,一切都好。如果您将其添加为答案,我可以给您好评!
  • 是的,这样做,然后ping我们,这样我们就可以为敏锐的眼睛撒点儿

标签: php mysql pagination group-by phalcon


【解决方案1】:

你的子句顺序有误。

您必须在您的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

【讨论】:

  • 即使这不能解决问题,+1 指出HAVING 应该在GROUP BYORDER 之间使用
  • 事实证明Phalcon\Pagination 似乎不适用于 PHQL,所以我用查询生成器重新做了,但是现在当我添加分页器时,它似乎在广告 @ 时中断了查询987654329@查询。所以我实际上仍然没有任何地方,但感谢您指出我的方式的错误。
  • 您能否使用查询生成器中的代码更新您的问题?
  • 或者更好的是,创建一个新问题。因为你的新问题并没有真正反映原来的标题。
  • @Timothy 我想你已经找到了,我添加了一个新问题。你也为回答这个问题而洒满了仙尘。我希望仙尘是你喜欢的,当它进入你的眼睛时不会刺痛! ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 2021-04-01
  • 2018-07-16
  • 1970-01-01
相关资源
最近更新 更多