CakePHP SQL查询计数

时间:2013-07-22 08:36:15

标签: sql cakephp

我遇到有关CakePHP SQL查询的问题。我需要从给出shop_id的数据库中获取产品,然后计算产品。我需要的只是Product.url及其数量。

这将在纯SQL中实现:

SELECT url,COUNT(*) as count FROM products GROUP BY url ORDER BY count DESC;

这个我过去常常得到与商店有关的所有产品:

$this->Product->find('all', array('conditions' => array('Product.shop_id'=>$id)));

这是正常的,但我需要将上面的SQL查询转换为CakePHP。

我试过这样的事情:

$this->Product->find('count', array('conditions' => array('Product.shop_id'=>$id),
                                        'fields'=>array('Product.url','Product.id'),
                                        'order'=>'count DESC',
                                        'group'=>'Product.url'));

只返回一个int。但是如果我在mysql服务器上运行上面提到的SLQ查询,我会得到两列:url和count。如何使用CakePHP获得相同的结果?

3 个答案:

答案 0 :(得分:2)

你可以试试这个:

$data = $this->Post->query(
    "SELECT COUNT(id),MONTH(created) FROM posts GROUP BY YEAR(created), MONTH(created);"
);

答案 1 :(得分:1)

最简单的方法:

$this->Product->query("SELECT url,COUNT(*) as count FROM products GROUP BY url ORDER BY count DESC;");

......至少对我而言。

答案 2 :(得分:1)

请尝试以下代码:

$this->Product->virtualFields['CNT_PRODUCTS'] = 0;
$this->Product->find('count', array('conditions' => array('Product.shop_id' => $id),
                                    'fields' => array('Product.id', 'Product.url', 'count(*) as CNT_PRODUCTS'),
                                    'order' => array('CNT_PRODUCTS' => 'DESC'),
                                    'group' => 'Product.url'));