繁体   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