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のみを返します。しかし、上記の SLQ クエリを mysql サーバーで実行すると、url と count の 2 つの列が得られます。CakePHP で同じ結果を得るにはどうすればよいですか?

4

3 に答える 3

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 に答える