1

すべての製品の詳細を含むテーブル名 products と、各倉庫の製品の数量の詳細を含む別の ws_products があります。

製品テーブルから ID、コード、名前を選択し、products.id = ws_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");

合計ではなく、ws_products に存在するリスト製品を取得します。一部の製品は、ws_products に 2 つのエントリがあるため、2 回リストされています。

すべての製品を 1 回だけリストしたい数量に 0 を入力したい場所と、ws_products で 1 を超える場所にすべての数量の合計を表示したい

助けていただければ幸いです。

テーブル構造

Products
id, code, name, unit, price

whs_products
id, product_id, warehouse_id, quantity

倉庫ID、名前、住所用の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();

すべて順調。しかし、製品の総数は間違って計算されます。システムは、ws_products から数量を取得するたびに、合計製品に 1 を追加すると思います。商品によっては、各倉庫により2~3倍の数量がございます。

これに対する解決策。あなたのサポートにとても感謝しています。

4

1 に答える 1

4

次のクエリとコメントを試してみてください。

サンプルデータ:-

製品

PID     PNAME
1   j
2   k
3   m

whs_製品

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

pid で合計を取得するクエリwhs_products

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;
  }
}

LEFT JOINコメントで要求されたOPとして編集

Products テーブルにすべての製品を表示するには、次の手順を実行します。

  • 表からのselectショーで。pidProducts

  • 使用するfrom Products Left Join Whs_Products

  • Group by pidProductsテーブルから

于 2012-12-26T10:28:18.380 に答える