0

問題: データベースに存在する 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の場所を描写することはできませんデータベースにはありますが、実際にはアイテムが割り当てられていません。

誰にも洞察がありますか?私が見つけたすべての修正はまだ機能していません。

4

1 に答える 1

2

動く

WHERE tbl_inventory.shop_id = 110

結合条件への条件

 ON tbl_location.location_id = tbl_inventory.location_id
AND tbl_inventory.shop_id = 110

FROMandLEFT JOIN句が機能した後-そこに行があります0が、その行にWHEREないため、それを除外しますtbl_inventory.shop_id = 110

tbl_location.location_idPS: select では、 ではなくである必要がありますtbl_inventory.location_id

于 2013-03-14T04:12:36.877 に答える