2015-01-08 39 views
0

我有兩個表,網站和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) 

如果我從數據庫控制檯執行此查詢沒有錯誤occures。

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和1.3.4爾康什麼 是錯的這個聲明?

回答

1

這種查詢可以 - - ,應該有一個連接,而不是一個子查詢來實現:

$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

+0

謝謝。我不知道連接查詢比子查詢有更多的性能。 –