[英]Yii Framework and HAS_ONE relation with millions of rows
下午好。
我有一個名為“ Cliente”的模型,另一個名為“ Acct”。 許多“ Acct”的比率為1“ Cliente”。 當我使用has_one關系時,它獲取所有數百萬個“ Acct”以僅選擇這些結果之一。
有關“客戶”的模型聲明:
'accts' => [
self::HAS_MANY,
'Acct',
'cliente_id',
],
'lastAcct' => [
self::HAS_ONE,
'Acct',
'cliente_id',
'order' => 'acct.id DESC',
],
在Yii中(Yii1以及Yii2),創造了“有一”的關系並不自動適用一個LIMIT 1
到查詢。 您可以在此處閱讀有關其背后原因的更多信息: https : //github.com/yiisoft/yii/pull/2113
您應該手動添加limit子句,如下所示:
'lastAcct' => [
self::HAS_ONE,
'Acct',
'cliente_id',
'order' => 'acct.id DESC',
'limit' => '1'
],
先生,謝謝您的回答。
此“限制”不僅可以關聯查詢,還可以輸入主要查詢,例如,如果您搜索成千上萬的“客戶端”,而每個中的最后一個“帳戶”都將不起作用,則只會獲得一個“客戶端”。
補充...
為了解決這個問題,我使用了一個子查詢,例如:
LEFT OUTER JOIN `radacct` `acct` ON ((acct.username = t.login) AND (acct.radacctid = (SELECT radacctid FROM `radacct` `acct_subquery` WHERE acct_subquery.username = t.login GROUP BY acct_subquery.username ORDER BY acct_subquery.radacctid DESC LIMIT 1)))
但是讓我擔心的是,在此子查詢過百萬結果之后,這是必須要做的,而且自從他創立公司以來,ERP每周,每月,每年都必須報告。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.