0

Request というテーブルがあります。
他のテーブルは、リクエスト ID を介して Request テーブルにリンクされています。TwitterTweet テーブルと FacebookPost テーブルがあります。したがって、1 つのリクエストで 50 個の TwitterTweets および/または 20 個の FacebookPosts、または任意の数の Tweets/Posts を含めることができます。これらを合計すると合計 70 個になります。

合計数が最も多いリクエストを教えてくれるクエリを作成しようとしています。

私はこれが間違っていることを知っています: (私は TwitterTweet 内のカウントでそれらを並べ替えようとしましたが、Count.count 列を戻すと思われる OUTER JOIN を実行できませんでした。Left Join を実行する必要がありました。私のロジックは、リクエストIDによって各行の結果が計算されるように結合を行うことでした)

SELECT r1.`id` AS requestid, r1 . * 
FROM  `Request` AS r1
LEFT JOIN 

(SELECT COUNT( * ) AS count, rid
FROM 

((SELECT  `TwitterTweet`.`id` AS  `smid` ,  `TwitterTweet`.`requestid` AS rid
FROM  `TwitterTweet` 
WHERE  `TwitterTweet`.`requestid` = requestid
AND  `TwitterTweet`.`active` =1) AS talias

)) AS Count ON ( Count.rid = requestid ) 
ORDER BY Count.count

*Facebook 側に追加しようとすると、それ以上コンパイルされませんでした (概念は、結果が TwitterTweet から追加され、FacebookPost からの結果が特定の requestid に添付されて、カウントが得られるというものです。結果セット全体その数で注文する必要があります)

SELECT r1.`id` AS requestid, r1 . * 
FROM  `Request` AS r1
LEFT JOIN 

(SELECT COUNT( * ) AS count, rid
FROM 

((SELECT  `TwitterTweet`.`id` AS  `smid` ,  `TwitterTweet`.`requestid` AS rid
FROM  `TwitterTweet` 
WHERE  `TwitterTweet`.`requestid` = requestid
AND  `TwitterTweet`.`active` =1 ) AS talias 

UNION All

(SELECT `FacebookPost`.`id` AS  `smid`, `FacebookPost`.`requestid` AS rid
FROM  `FacebookPost`
WHERE  `FacebookPost`.`requestid` = requestid
AND  `FacebookPost`.`active` = 1) as falias 

)) AS Count ON ( Count.rid = requestid ) 
ORDER BY Count.count

エイリアスを追加しようとして、クエリを更新しました。

SELECT rid, SUM(count) total_count

FROM 

(
(SELECT COUNT(*) AS count, r.rid
FROM   request r
       JOIN TwitterTweet tt
       ON r.id = tt.requestid
WHERE  tt.active = 1
GROUP BY r.rid) AS twitter

UNION ALL

(SELECT COUNT(*) AS count, r.rid
FROM   request r
       JOIN FacebookPost fp
       ON r.id = fp.requestid
WHERE  fp.active = 1
GROUP BY r.rid ) AS fbook
)

GROUP BY rid

ORDER BY SUM(count) DESC

中央のサブクエリにエイリアスを与えるために別の調整を行いましたが、現在、rid 列にゼロがあり、total_count 列に 5686 が返された 1 行しか返されません... 5686 がすべての結果である可能性があります。

SELECT counts.rid, SUM(count) total_count

FROM 

(
SELECT COUNT(*) AS count, r.requestid AS rid
FROM   request r
       JOIN TwitterTweet tt
       ON r.id = tt.requestid
WHERE  tt.active = 1
GROUP BY r.requestid

UNION ALL

SELECT COUNT(*) AS count, r.requestid AS rid
FROM   request r
       JOIN FacebookPost fp
       ON r.id = fp.requestid
WHERE  fp.active = 1
GROUP BY r.requestid
) AS counts

GROUP BY counts.rid

ORDER BY SUM(count) DESC

とった!!!助けてくれてありがとう、リクエストでこれらの結合を削除する必要がありました:

SELECT counts.rid, SUM(count) total_count

FROM 

(
SELECT COUNT(*) AS count, tt.requestid AS rid
FROM  TwitterTweet tt
WHERE  tt.active = 1
GROUP BY tt.requestid

UNION ALL

SELECT COUNT(*) AS count, fp.requestid AS rid
FROM   FacebookPost fp
WHERE  fp.active = 1
GROUP BY fp.requestid
) AS counts

GROUP BY counts.rid

ORDER BY SUM(count) DESC
4

1 に答える 1