【问题标题】:How to get data from a database using count, sum and group by in Cakephp?如何在 Cakephp 中使用 count、sum 和 group by 从数据库中获取数据?
【发布时间】:2013-12-01 14:32:27
【问题描述】:

我有 3 张表:产品、折扣和订单。 我试图通过使用此查询来获取数据:

SELECT discounts.product_id, products.product_name,
    sum(products.product_price - discounts.product_discount) as total_Amount,
    count(orders.order_id) as total_Number
    FROM products 
    inner join discounts on products.product_id = discounts.product_id
    inner join orders on discounts.discount_id = orders.discount_id
    group by discounts.product_id,products.product_name

这就是我在Orderscontroller中所做的:

$this->Order->recursive=2;
    $hotest_products = $this->Order->find('all',
        array( 'limit'=>20,
       'fields'=>array('Discount.product_id', 'Product.product_name',
                       'SUM(Discount.product_discount) AS total_Amount',
                       'COUNT(Order.order_id) AS total_Number'
                       ), 
       'group'=>array('Discount.product_id','Product.product_name'), 
       'order'=>array('Discount.product_id ASC')));

    $this->set('products',$hotest_products);

在视野中:

<?php foreach ($products as $product): ?>

        <tr>    
            <td><?php echo $product ['Discount']['product_id']; ?></td>
            <td><?php echo $this->Html->link($product['Product']['product_name'], array('controller'=>'products', 'action' => 'view', $product['Discount']['product_id'])); ?></td>
            <td><?php echo $product ['Product']['total_Amount']; ?></td>
            <td><?php echo $product ['Product']['total_Number']; ?></td>
            </td>
        </tr>

        <?php endforeach; ?>

但是,我得到了一个错误:

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Product.product_name' in 'field list'

另一个问题是,在视图中,我不知道如何获取total_Number和total_Amount,因为我不知道它们属于哪个模型。

编辑:我发现上面的代码没有加入 products 表,因为它的结果是:

SELECT `Discount`.`product_id`, `Product`.`product_name`,
SUM(`Discount`.`product_discount`) AS total_Amount,
COUNT(`Order`.`order_id`) AS total_Number 
FROM `project`.`orders` AS `Order`
LEFT JOIN `project`.`users` AS `User` 
ON (`Order`.`user_id` = `User`.`user_id`) 
LEFT JOIN `project`.`discounts` AS `Discount` 
ON (`Order`.`discount_id` = `Discount`.`discount_id`) 
WHERE 1 = 1 GROUP BY `Discount`.`product_id`, `Product`.`product_name` 
ORDER BY `Discount`.`product_id` ASC LIMIT 20

但是为什么我设置recursive=2时它没有包含产品表? 3 talbes 之间的关联是: 产品 > 折扣 > 订单。 (> 表示有很多)。

请帮助我。提前致谢。

【问题讨论】:

  • 你能确定 Product 表中有 product_name 列吗?
  • 其实是在 products 表中。

标签: mysql cakephp


【解决方案1】:

将 Product.product_name 更改为 Products.product_name 所以从这里

'fields'=>array('Discount.product_id', 'Product.product_name',
                       'SUM(Discount.product_discount) AS total_Amount',
                       'COUNT(Order.order_id) AS total_Number'
                       ), 

'fields'=>array('Discount.product_id', 'Product.product_name',
                'SUM(Discount.product_discount) AS total_Amount',
                 'COUNT(Order.order_id) AS total_Number'), 

【讨论】:

  • 我想,Product.product_name 中的 Product 是模型的名称。即使我更改为 Products.product_name,我也会收到错误:错误:SQLSTATE[42S22]:找不到列:1054 Unknown column 'Products.product_name' in 'field list'
  • 使用单数形式的“产品”,而不是“产品”
  • @GuillemoMansilla 你的意思是 Product.product_name 吗?它仍然没有工作。
  • 产品是否与订单相关联?
  • @GuillemoMansilla 不,不是。请看上面的帖子,因为我刚刚编辑了它。
猜你喜欢
  • 2018-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 2013-11-05
相关资源
最近更新 更多