1

だから私はブログのリストとどのユーザーがどのブログにサブスクライブされているかを追跡するサブスクリプションレコードのリストを持っています。ブログの総数を知りたいのですが、少なくとも2人がブログを購読しています。与えられたテーブルのリストは次のとおりです。

CREATE TABLE IF NOT EXISTS `blogs` (
    `id` int(11) NOT NULL,
    `name` varchar(255),
    `user_id` int(11)
);

CREATE TABLE IF NOT EXISTS `subscribers` (
   `user_id` int(11) NOT NULL,
   `blog_id` int(11) NOT NULL,
);

これを解決するためにPHPで処理を行う必要がないため、1つのクエリのみを使用して生の数値を取得するためにいくつかのことを試みました。これがうまくいかなかった私の試みのいくつかです:

#This was my attempt to just count the results of a subquery on the subscribers table (FAILED)
SELECT COUNT(*) FROM (SELECT COUNT(*) as subs_count FROM `subscribes` WHERE subs_count > 1) AS dummy_table WHERE 1;

#This was my attempt to produce a count of the number of subscribers and count that (FAILED)
SELECT COUNT(*) FROM `subscribes` WHERE count(*) >= 2 GROUP BY blog_id;

#I'm sure of how to get the number of subscribers to each blog irregardless of subscription count, that query looks as followed:
SELECT id, title, COUNT(*) as subs_count FROM `blogs`, `subscribers` WHERE `blogs`.`id` = `subscribers`.`blog_id` GROUP BY `blog_id` ORDER BY subs_count DESC;

ただし、そのクエリを2つ以上のサブスクライブを持つブログのみを返すように制限すると、まだ理解できません。いつもお世話になっております。

4

1 に答える 1

4

HAVING句を使用して、GROUPBYをフィルタリングします。

SELECT id, title, COUNT(*) as subs_count  
FROM `blogs`, `subscribers`  
WHERE `blogs`.`id` = `subscribers`.`blog_id`
GROUP BY `blog_id`
HAVING COUNT(*) >= 2
ORDER BY subs_count DESC;
于 2013-01-11T18:34:54.617 に答える