簡體   English   中英

Yii Framework和具有數百萬行的HAS_ONE關系

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

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