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