【问题标题】:Getting Sum of db field using join active record in codeigniter使用 codeigniter 中的连接活动记录获取 db 字段的总和
【发布时间】:2012-12-11 22:12:00
【问题描述】:

我有一个包含所有产品详细信息的表名 products 和另一个包含每个仓库产品数量详细信息的 whs_products。

我想从 products 表中选择 id、code 和 name 以及 products.id = whs_products.product_id 的数量总和

我正在尝试这个

$this->db->select("id, code, name");
$this->db->from("products");
$this->db->join('whs_products', 'products.id = whs_products.product_id');
$this->db->select("quantity");

我得到 whs_products 中存在的列表产品而不是总和。有些产品被列出两次,因为它们在 whs_products 中有 2 个条目。

我只想在没有数量的地方列出所有产品,我想在数量中输入 0 并且它在 whs_products 中大于 1 我想显示所有数量的总和

我们将不胜感激!

表结构

Products
id, code, name, unit, price

whs_products
id, product_id, warehouse_id, quantity

我也有 whs 表用于仓库 身份证、姓名、地址


我试过这个先生,

$this->db->select("products.id as productid, products.code, products.name, products.unit, products.cost, products.price,   sum(whs_products.quantity) as 'totalQuantity'")
->from('products')
->join('whs_products', 'whs_products.product_id=products.id', 'left')
->group_by("products.id");
$this->db->get();

一切都很好。但产品总数计算错误。我认为系统将总产品加 1,每次从 whs_products 获取数量。对于某些产品,数量是 2 或 3 次,具体取决于每个仓库。

对此的任何解决方案。 非常感谢您的支持。

【问题讨论】:

  • 您的查询中似乎没有任何sum...
  • 是的,我不知道该由谁来做这个:(对不起
  • 您能否向我们提供您的表格结构、您当前的要求以及您的期望?
  • 我已经更新了问题

标签: php mysql codeigniter join codeigniter-2


【解决方案1】:

请尝试以下查询和评论。

样本数据:-

产品

PID     PNAME
1   j
2   k
3   m

whs_Products

WID     PID     QUANTITY
11  2   300
11  2   200
14  2   500
11  1   300
15  3   100
14  3   800

通过whs_products中的pid查询总和

select pid, wid, sum(quantity) 
from whs_products
group by pid, wid
;

结果:

PID     WID     SUM(QUANTITY)
1       11      300
2       11      500
2       14      500
3       14      800
3       15      100

查询使用变量来获取pid 的用户输入并通过pid、wid

-- group by pid and wid
set @var:='2'
;
select a.pid, b.pname, a.wid, sum(a.quantity) 
from whs_products a
join products b
on b.pid = a.pid
where a.pid = @var
group by a.pid, wid
;

结果:

PID     PNAME   WID     SUM(A.QUANTITY)
2       k   11  500
2       k   14  500

最终查询仅通过用户输入的 pid 显示数量

查询:

-- by pid only    
set @var:='2'
;
select a.pid, b.pname, sum(a.quantity) 
from whs_products a
join products b
on b.pid = a.pid
where a.pid = @var
group by a.pid
;

结果:

PID     PNAME   SUM(A.QUANTITY)
2       k   1000

既然 OP 想要在 CodeIgniter 中

这是您尝试的先机。一开始我的印象是你已经知道codeigniter 的语法并且你正在寻找SQL 逻辑,所以你可以将它转换成你需要的格式。

$this->db->select("a.pid, b.pname, count(a.quantity) as 'toalQuantity'");
$this->db->from('wsh_products a');
$this->db->join('products b', 'a.pid=b.pid', 'inner');
$this->db->group_by("a.pid"); 
$where = "a.pid = 2";
$this->db->get();
$query->results_array();

或者写一个函数:):

function getQuantity($prodid = false)
{
  $this->db->select(a.pid, b.pname, count(a.quantity) as 'toalQuantity');
  $this->db->join('wsh_products a', 'a.pid=b.pid');
  if ($prodid !== false)
    $this->db->where('a.pid', $prodid);
  $query = $this->db->get('products b');

  if($query->result() == TRUE)
  {
    foreach($query->result_array() as $row)
    {
      $result[] = $row;
    }
    return $result;
  }
}

在 cmets 中按 OP 请求为 LEFT JOIN 编辑

要在 Products 表中显示所有产品,请执行以下操作:

  • 在select 中显示来自Products 表的pid。

  • 使用from Products Left Join Whs_Products

  • Group by pid 来自Products 表

【讨论】:

  • @Saleem 我个人不使用codeigniter。但我可以在这个答案中找到一些有用的提示:)
  • 谢谢先生,非常感谢您的帮助和时间。
  • 你太棒了!有效。但是用表名改变了 a 和 b 。最后一个问题现在它显示了 whs_products 中存在的产品。我想列出产品表中的所有产品,以及它不在 whs_products 中的地方,我想在数量上显示 0。帮助!
  • 这里 SQLfiddle sqlfiddle.com/#!2/3b178/5 它只显示 3 个产品我希望所有产品最后 2 个,数量为 0。感谢您的帮助
  • @Saleem 在Products 表中获取所有产品,尽管它们可能不在whs_Products 表中,主要取决于LEFT JOIN。在你的问题中没有提到它。所以我给了你inner join。但我在想你可能需要LEFT JOIN。 SQLFiddle 是一个示例。请知道 SQLFiddle 是一个示例。因此,在您的真实表格中,您可以添加所有数据并尝试:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
  • 2014-06-22
  • 1970-01-01
  • 2013-07-30
  • 1970-01-01
相关资源
最近更新 更多