在Phalcon的查询构建器中嵌套选择

时间:2015-01-08 23:02:06

标签: sql phalcon

我有两个表,网站和user_website_map

我想选择具有嵌套选择条件的网站

代码就是这个

$query = \Website::query()->addWhere('id in (SELECT user_website_map.website_id from security.user_website_map where user_id = :userId )', [':userId' =>  $this->getId()]) ;
        return $query->execute();

此语句抛出异常

Phalcon\Mvc\Model\Exception: Syntax error, unexpected token SELECT, near to ' user_website_map.website_id from security.user_website_map where user_id = :userId )', when parsing: SELECT [Website].* FROM [Website] WHERE id in (SELECT user_website_map.website_id from security.user_website_map where user_id = :userId ) (138)

如果我从数据库控制台执行此查询,则不会发生错误。

SELECT  * FROM main.website WHERE  id in (SELECT user_website_map.website_id from security.user_website_map where user_id = 2)

有关我使用postgresql-9.4和Phalcon 1.3.4的信息 这个陈述有什么问题?

1 个答案:

答案 0 :(得分:1)

此查询可以 - 而且应该 - 使用连接而不是子查询来完成:

$query = \Website->query()
    ->join('UserWebsiteMap') // replace with actual model name
    ->where('user_id = :user_id:', array('user_id' => $this->getId()));

虽然我比使用PostgreSQL更熟悉MySQL,但我相信对于这两个数据库来说,子查询相对于连接对性能有负面影响。请参阅以下链接以获取解释原因:Join vs. sub-query