問題: データベースに存在する location_id に対して 0/NULL を返すようにデータベースを取得できませんが、tbl_inventory でアイテムが割り当てられていません。アイテムが割り当てられている location_id のカウントに加えて。
tbl_inventory: (投稿関連の列のみ)
location_id, shop_id, ...
1 | 100
1 | 100
3 | 106
4 | 100
10 | 102
2 | 100
tbl_location: (すべての列を投稿)
location_id, location_desc, shop_id
1 | Shop Stock | 100
2 | Crash Kit | 100
3 | Site 4 | 106
4 | Radar Site | 102
5 | New Location | 100
...
10 | Fire Stn 2 | 100
クエリ
SELECT
tbl_location.location_desc,
tbl_inventory.location_id,
COALESCE(COUNT(tbl_location.location_id), 0) as 'idCnt'
FROM tbl_location
LEFT OUTER JOIN tbl_inventory
ON tbl_location.location_id = tbl_inventory.location_id
WHERE tbl_inventory.shop_id = 110
GROUP BY tbl_location.location_id;
結果
location_desc, location_id, idCnt
Shop Stock | 1 | 2
Crash Kit | 2 | 1
Fire stn 2 | 10 | 1
ここに欠けているのは、tbl_location の location_id 5 です
New Location | 5 | 0 (or Null, because there are none in tbl_inventory)
説明:
my tbl_location は、ネットワーク内の個々のショップによって割り当てられた (および作成された) コンテナー ラベルのテーブルです。その後、ショップはそのコンテナーの所有権を持ち、在庫の目的でパーツをコンテナーに割り当てることができます (tbl_inventory.location_id)。
私の PHP アプリケーションは、このクエリを使用して、利用可能な場所のリストを生成し、割り当てられたアイテムの量に基づいてオプションを付与します。アイテムの量が 0 の場合、場所を削除できるようにしたいと考えています。
さらに悪いことに
GROUP BY を削除すると、クエリ全体が台無しになります。1 つの location_id/desc のみを返し、その行の合計を合計します。
location_desc, location_id, idCnt
Shop Stock | 1 | 5
ここで実際に何が起こっているのかわかりません (さらに悪いブロックで) - ただし、手動でカウントしたところ、元のクエリは正しいカウントを返します。実際に存在するDOの場所を描写することはできませんデータベースにはありますが、実際にはアイテムが割り当てられていません。
誰にも洞察がありますか?私が見つけたすべての修正はまだ機能していません。