【问题标题】:PhalconPHP can not parse my queryPhalconPHP 无法解析我的查询
【发布时间】:2026-01-19 06:55:02
【问题描述】:
SELECT * FROM
(SELECT post.* FROM post ORDER BY post.timestamp DESC) as post
GROUP BY post.topic_id
ORDER BY post.timestamp DESC, post.position
LIMIT 15

Phalcon 在尝试执行上述查询时抛出以下错误。查询本身在默认 sql 上运行良好。

Syntax error, unexpected token (, near to ' SELECT post.* FROM post ORDER BY post.timestamp DESC ) as post GROUP BY post.topic_id ORDER BY post.timestamp DESC, post.position LIMIT 15', when parsing: SELECT * FROM ( SELECT post.* FROM post ORDER BY post.timestamp DESC ) as post GROUP BY post.topic_id ORDER BY post.timestamp DESC, post.position LIMIT 15 (162)

使用以下 PHP 代码(用于测试):

$sql = <<< QUERY
    *query*
QUERY;

$query = $this->modelsManager->createQuery($sql);
$result = $query->execute();

感谢您的帮助。

【问题讨论】:

标签: php mysql sql phalcon


【解决方案1】:
  1. 创建视图,保留已经反向排序的虚拟表:

    CREATE VIEW v_latest_posts AS SELECT * FROM post ORDER BY timestamp DESC

  2. 在选择中使用视图:

    从 v_latest_posts 中选择 * 按主题 ID 分组 ORDER BY 时间戳 DESC,位置 ASC 限制 15

【讨论】:

  • 因为他想要每个主题的最新帖子。您的查询将为每个主题随机发布一篇文章。
  • 谢谢,但我似乎没有工作。 Phalcons PHQL-Language-Parser 现在搜索一个名为 v_latest_posts 的模型。但是找到了解决办法,看这里:puu.sh/j79B1/c9846608de.png