【问题标题】:How do I order query results by an associated model field with conditions?如何按关联模型字段和条件对查询结果进行排序?
【发布时间】:2011-07-06 15:45:48
【问题描述】:

过去两天我一直在尝试找到解决此问题的方法,因此任何可以提供解决方案或链接到某个地方的人都可以找到我需要知道的内容,这将对我大有帮助。

我在 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 所在的关联点击记录的数量对这些结果进行排序。我已经计算出该部分应该如下所示:

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'
    );

我只是不确定这部分应该放在哪里。

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

【问题讨论】:

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


    【解决方案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
    

    希望其他人会发现这很有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-01
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多