2016-03-29 10 views
1

Sqlクエリはうまく動作しますが、cakephpは期待される出力を返しません。group byとcountのcakephpが期待した結果を返さない

SELECT products.product_id, products.product_title, COUNT(posts.post_id) 
AS total_post 
FROM products 
LEFT JOIN posts ON posts.product_id = products.product_id 
GROUP BY products.product_id 

最初の製品名、合計ポスト(ない製品タイトル賢明)と第1の製品に関連する記事

+0

あなたのオプション配列には何も間違っています。なぜそのようなことが起こると思いますか?あなたがそこでやっていることがおそらくうまくいく可能性があることをドキュメントでは確かに示していません。 ** http://book.cakephp.org/2.0/ja/models/retrieving-your-data.html#find** | ** http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#joining-tables** | ** http://book.cakephp.org/2.0/en/models/virtual-fields.html** – ndm

+0

私にそれを知らせてくれてありがとう。 – Amir

+0

それを指摘してくれてありがとうndm – Amir

答えて

0

ケーキドクターによると、それは解決しました。クエリは次のようにする必要があります

$options['joins'] = array(
     array('table' => 'posts', 
      'alias' => 'Post', 
      'type' => 'LEFT', 
      'conditions' => array(
       'Post.product_id = Product.product_id', 
      ) 
     ) 
    ); 
    $options['conditions'] = array(
     'Product.is_active' => 1 
    ); 
    $options['fields'] = array(
     'Product.product_id, Product.product_title,COUNT(Post.post_id) as total_post' 
    ); 
    $options['group'] = array(
     'Product.product_title' 
    ); 
    $options['recursive'] = 0; 
    $products = $this->Product->find('all', $options); 
0

を返すCakePHPのクエリビルダ

$products = $this->Product->find('all',array(
     'Product.is_active' => 1, 
     'fields'=>array(
      'Product.product_id, Product.product_title,COUNT(Post.post_id) as total_post' 
     ), 
     'joins'=>array('LEFT JOIN posts as Post ON Post.product_id = product.product_id'), 
     'GROUP'=>'Product.product_title' 
    )); 

をして、グループで参加し、参照の例をご確認くださいあなたが間違っているもの

$options = array(
       'conditions' => $conditions, 
       'fields'=>array('Category.*','COUNT(`Entity`.`id`) as `entity_count`'), 
       'joins' => array('LEFT JOIN `entities` AS Entity ON `Entity`.`category_id` = `Category`.`id`'), 
       'group' => '`Category`.`id`', 
       'contain' => array('Domain' => array('fields' => array('title'))) 
      ); 

      return $this->find('all', $options); 
+0

私はすでにそれを試してみた – Amir

+0

あなたの条件を配列に渡していないあなたのコードを参照してください – Salman

関連する問題