[英]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.