代码之家  ›  专栏  ›  技术社区  ›  Leo

MySQL中的逻辑列-如何?

  •  1
  • Leo  · 技术社区  · 14 年前

    我有一个数据模型,比如说: invoices (m:n) invoice_items invoice_items ,在中的列中 invoices . 我不喜欢存储派生数据,因为它为以后的错误铺平了道路。

    如何在中创建逻辑列 发票 MySql中的表?这是我在PHP中更好的处理方法吗(在本例中是CakePHP)?

    4 回复  |  直到 14 年前
        1
  •  2
  •   Travis Leleu    14 年前

    狮子座,

    试试这个:

    class Invoice extends AppModel {
    // .. other stuff
     function afterFind() {
      parent::afterFind();
      $total = 0;
      foreach( $this->data['Invoice']['InvoiceItems'] as $item )
       $total += ($item['cost'] * $item['quantity']);
    
      $this->data['Invoice']['total'] = $total;
     }
    }
    

    我可能弄乱了hasMany关系(foreach行)上的数组,但我希望您能得到它的jist。嗯,

        2
  •  3
  •   mikegreenberg    14 年前

    CakePHP中有一个叫做虚拟字段的东西,它允许您在模型中实现相同的结果,而不是依赖MySQL的支持。虚拟字段允许您“混搭”模型中的各种数据,并将其作为记录中的附加列提供。它比这里的其他方法更干净…(没有afterFind()黑客攻击)。

    阅读更多信息: http://book.cakephp.org/view/1608/Virtual-fields

        3
  •  1
  •   zebediah49    14 年前

    您可以在需要时通过

    SELECT COUNT(1) as total FROM invoice_items
    

    //assuming that invoice_items.num is how many there are per row
    SELECT SUM(num) as total FROM invoice_items
    

    或者你可以使用一个视图,如果你有一个特定的方式,你希望它一直代表。