我遇到有关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获得相同的结果?
答案 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'));