我花了两天时间试图找到这个问题的解决方案,所以任何能够提供解决方案或链接的人都可以找到我需要知道的东西,这对我有用。 / 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'
);
我只是不确定这一点应该去哪里。
请有人能让我摆脱痛苦吗?谢谢:))
答案 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
希望其他人会觉得这很有用。