4つのテーブル(ファブリック、予約、ファブリックメンバー、ノード)があります。MySQL他の2つのテーブルのテーブル内の関連フィールドの数
それぞれの「ノード」には、「ファブリックメンバー」がさらにゼロ(関連付けられている)の可能性があります。 各「ファブリック」には、ゼロ以上の「ファブリックメンバー」(それに関連付けられている)がある場合があります。 ノードには、1つの「ノード」に関連付けられた「予約」があります。
したがって、あなたがたときにこれらの事間の参照を見ることができます:
fabricmember.ipaddr = reservation.ipaddr
と
fabricmember.fabric = fabric.fabricname
(あなたが実際にすることなく、すべてこれを行うことができます「ノード」を参照)。
FABRICごとに表示される1つのクエリ、それに関連付けられている予約の数、およびそのファブリックの数(合計)を計算します。生地はゼロメンバーを持っている、またはそれはメンバーが、それらを持っているがあれば、
select
fabricmembers.fabric,
count(reservations.ipaddr) as Memebers,
count(nodes.ipaddr) as Reservations
from fabricmembers
LEFT JOIN (reservations,nodes)
ON ((reservations.ipaddr = fabricmembers.ipaddr) and (nodes.ipaddr = fabricmembers.ipaddr))
GROUP BY (fabricmembers.fabric);
そしてこのほとんど作品:ここでも、単一のクエリ
に私は次のクエリを使用していましたメンバーがZEROの予約をしていると、ファブリックは単にクエリに表示されません。
次は、ファブリックは、その数がゼロの場合でも、持っているどのように多くのメンバー私を見るために動作します。しかし、私は私の番号を教えても、クエリを持ってする方法を見つけ出すことはできません
select fabricname,count(fabricmembers.ipaddr)
from fabrics
LEFT JOIN (fabricmembers)
ON (fabrics.fabricname = fabricmembers.fabric)
GROUP BY (fabrics.fabricname);
メンバー。
これは意味がありますか? ご協力いただければ幸いです!あなたが持つ唯一の布のテーブルからそれを構築しようとしているので、あなたのクエリは、ゼロ予約/ゼロのメンバーとファブリックを返さない
SELECT fabricmembers.fabric f,
(SELECT count(*) FROM reservations r where r.ipaddr = f.ipaddr) Members,
(SELECT count(*) FROM nodes n where n.ipaddr = f.ipaddr) Reservations
FROM fabricmembers
私はあなたの言うことを完全に理解しています。私はそれを知っていた、私はちょうどそれに対処する方法を知らなかった。私はそれを解決する方法を見つけましたが、あなたはもっと優雅に見えます。私は今夜後でこれを試してみる。ありがとう! – Brad