0

我有一个关于 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 获得相同的结果?

4

3 回答 3

2

你可以试试这个:

$data = $this->Post->query(
    "SELECT COUNT(id),MONTH(created) FROM posts GROUP BY YEAR(created), MONTH(created);"
);
于 2018-05-04T15:17:08.563 回答
1

最简单的方法:

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

...至少对我来说。

于 2013-07-22T09:04:47.583 回答
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'));
于 2013-07-22T09:39:48.120 回答