簡體   English   中英

在Phalcon的查詢構建器中嵌套選擇

[英]nested select in Phalcon's query builder

我有兩個表,Website和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,此語句有什么問題?

此查詢可以並且應該通過聯接而不是子查詢來完成:

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

雖然我對MySQL的了解比對PostgreSQL的了解要多,但我相信對於兩個數據庫而言,子查詢相對於聯接對性能都有負面影響是正確的。 有關原因的說明,請參見以下鏈接: Join vs. sub-query

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM