2012-02-05 21 views
1

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 

答えて

1

:あなたが好きなこの何かのために、相関サブクエリを使用する必要が

+0

私はあなたの言うことを完全に理解しています。私はそれを知っていた、私はちょうどそれに対処する方法を知らなかった。私はそれを解決する方法を見つけましたが、あなたはもっと優雅に見えます。私は今夜​​後でこれを試してみる。ありがとう! – Brad

0

予約/メンバーが存在する!空のファブリックを見つけることができる唯一の場所はファブリックテーブルです。したがって、それを下から構築する必要があります。

SELECT fabrics.fabricname, count(reservations.ipaddr), count(fabricmember.ipaddr) 
FROM fabrics 
LEFT JOIN fabricmembers ON fabrics.fabricname = fabricmembers.fabric 
LEFT JOIN reservations ON fabricmembers.ipaddr = reservations.ipaddr 
GROUP by fabric.fabricname 
関連する問題