2016-07-26 25 views
-1

Ad(Id、AgentId、AdDesc、AdTitle、EmailId、Adate)、AdComment(ComId、Eメール、コメント、AdId)とMyLikes(LikeId、email、AdId )。ここで私は3つのテーブルを結合し、すべての広告ID(Ad.Id = AdComment.AdId)とMyLikesからの好きな数に基づいてAdテーブルのすべてのフィールドをAdCommentテーブルからのコメントの数とともに表示する必要があります(Ad.Id = MyLikes.AdId)。グループを使用して3つのテーブルを結合してカウントする

私はちょうど私が使用広告と広告のコメントに参加しました -

SELECT * , (
SELECT COUNT(c.AdId) 
) AS ComCount 
FROM Ad a 
LEFT JOIN AdComment c ON a.Id = c.AdId 
GROUP BY a.Id 
ORDER BY a.Id DESC 

をこれが正常に動作しています。私は広告やMyLikesに参加したとき

はまた、私は使用 - これは正常に動作している

SELECT a.Id, (
SELECT COUNT(*) 
FROM MyLikes m 
WHERE (
m.email = '[email protected]' 
AND m.AdId = a.Id 
) 
) AS MyCount 
FROM Ad a 
LEFT JOIN MyLikes m ON a.Id = m.AdId 
GROUP BY a.Id 

しかし、3つのテーブル結合をすべて試しても機能しない場合、コメントカウントに間違った値が与えられます。このため は私がどのように私はこれらの3つのテーブルを結合し、望ましい結果を得ることができます

SELECT a.Id,a.AgentId,a.EmailId,a.AdTitle,a.AdDesc, (
SELECT COUNT(m.AdId) 
FROM MyLikes m 
WHERE (
m.email = '[email protected]' 
AND m.AdId = a.Id 
) 
) AS MyCount,(
SELECT COUNT(c.AdId) 
) AS ComCount 
FROM Ad a 
LEFT JOIN MyLikes m ON a.Id = m.AdId LEFT JOIN AdComment c ON a.Id = c.AdId 
GROUP BY a.Id ORDER BY a.Id DESC  

をused-。

+2

質問を編集し、サンプルデータと希望する結果を提供してください。 –

答えて

0

私はここにサブクエリを使用して一つの選択肢ではなくjoinsでデータcountにだ、正しくあなたの質問を理解してると仮定:あなたはcorrelated subqueriesを希望する場合

select a.Id, a.AgentId, a.EmailId, a.AdTitle, a.AdDesc, 
     b.AdIdCount, c.AdIdCount 
from Ad a 
     left join (select AdId, count(*) AdIdCount 
        from AdComment 
        group by AdId) b ON a.Id = b.AdId 
     left join (select AdId, count(*) AdIdCount 
        from MyLikes 
        where email = '[email protected]' 
        group by AdId) c ON a.Id = c.AdId 

、これは動作するはずです:

select a.Id, a.AgentId, a.EmailId, a.AdTitle, a.AdDesc, 
     (select count(*) 
     from AdComment b 
     where a.Id = b.AdId), 
     (select count(*) 
     from MyLikes c 
     where c.email = '[email protected]' and 
      a.Id = c.AdId) 
from Ad a 
0

LikeIDとComIdがMyLikesテーブルとAdCommentテーブルの一意のIDフィールドであるとすると、 -

SELECT a.Id, 
     a.AgentId, 
     a.EmailId, 
     a.AdTitle, 
     a.AdDesc, 
     COUNT(DISTINCT m.LikeId) AS MyCount, 
     COUNT(DISTINCT c.ComId) AS ComCount 
FROM Ad a 
LEFT OUTER JOIN MyLikes m ON m.email = '[email protected]' AND a.Id = m.AdId 
LEFT JOIN AdComment c ON a.Id = c.AdId 
関連する問題