簡體   English   中英

如何通過帶有條件的關聯模型字段對查詢結果進行排序?

[英]How do I order query results by an associated model field with conditions?

我花了最后兩天的時間來尋找解決此問題的方法,以便任何可以提供解決方案或鏈接到某個我可以確定自己所需要知道的內容的人都將為我提供極大的幫助。

我在CakePHP中具有以下模型關系

Keyword hasMany Click

我想構造一個查詢(通過$ this-> Keyword-> find或使用自定義查詢),該查詢將返回一個類似關鍵字的列表,該列表按其上周獲得的點擊次數排序。 不幸的是,我不能只使用counterCache的“ click_count”字段來執行此操作,因為我只需要統計上周發生的點擊。 為了進一步使事情復雜化,我還必須在關鍵字字段中添加一個LIKE()條件。

這是到目前為止我得到的:

$result = $this->Keyword->find('all',array(
        'conditions' => array(
            'word_count >' => $keyword['Keyword']['word_count'],
            'UPPER(keyword) LIKE' => "%".strtoupper($keyword['Keyword']['keyword'])."%"
        ),
        'recursive' => 0,
        'limit' => 10
    ));

我只需要添加對這些結果進行排序的位,即可按上一周內Click.created所關聯的Click記錄數進行排序。 我已經計算出該部分應該看起來像:

array(
        'conditions' => array(
            'Click.created >' => date("Y-m-d",strtotime("1 week ago"))
        ),
        'fields' => array(
            'COUNT(Click.keyword_id) as count'
        ),
        'group' => 'Click.keyword_id',
        'order' => 'count DESC'
    );

我只是不確定這應該去哪里。

有人可以讓我擺脫痛苦嗎? 謝謝 :)

好吧,我設法對執行此頁面所需的SQL查詢進行標記: http : //www.experts-exchange.com/Web_Development/Web_Languages-Standards/ASP/Q_20646898.html

看起來像這樣:

SELECT *
        FROM keywords
        AS Keyword
        LEFT JOIN (SELECT keyword_id,count(*) AS click_count FROM clicks GROUP BY keyword_id)
        AS Click
        ON Keyword.id = Click.keyword_id
        WHERE Keyword.word_count > ".$keyword['Keyword']['word_count']."
        AND UPPER(Keyword.keyword) LIKE '%".strtoupper($keyword['Keyword']['keyword'])."%'
        ORDER BY Click.click_count DESC

希望其他人會發現這很有用。

暫無
暫無

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

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