如何通过具有条件的关联模型字段来订购查询结果?

时间:2011-03-01 16:36:06

标签: mysql sql cakephp cakephp-1.3 cakephp-1.2

我花了两天时间试图找到这个问题的解决方案,所以任何能够提供解决方案或链接的人都可以找到我需要知道的东西,这对我有用。 / p>

我在CakePHP中有以下模型关系

Keyword hasMany Click

我想构建一个查询(通过$ this-> Keyword->查找或使用自定义查询),它将返回按其在上次收到的点击次数排序的类似关键字列表周。不幸的是,我不能只使用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'
    );

我只是不确定这一点应该去哪里。

请有人能让我摆脱痛苦吗?谢谢:))

1 个答案:

答案 0 :(得分:1)

好吧,我成功地从这个页面中查找了我需要的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

希望其他人会觉得这很有用。